如何解决EF Core从外键检索具有空属性的实体到同一模型
当我查询数据库以检索记录,并且模型包含一个属性(该属性是相同类型的外键)时,该属性返回null
。我做错了什么?
我有这个模型课:
public class Customer
{
public int ID { get; set; }
[ForeignKey("ParentID")]
public virtual Customer Parent { get; set; }
public List<Contact> Contacts { get; set; }
[Required]
public string Name { get; set; }
}
带有基础表:
CREATE TABLE [dbo].[Customer]
(
[ID] INT IDENTITY (1,1) NOT NULL,[ParentID] INT NULL,[Name] NVARCHAR(MAX) NOT NULL,CONSTRAINT [PK_Customer]
PRIMARY KEY CLUSTERED ([ID] ASC),CONSTRAINT [FK_Customer_Customer_ParentID]
FOREIGN KEY ([ParentID]) REFERENCES [dbo].[Customer] ([ID])
)
它是使用EF Core代码首次迁移生成的。
CustomersController
尝试执行以下操作时:
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
// returns the correct customer with null Parent property which causes...
var customer = await _context.Customer
.FirstOrDefaultAsync(m => m.ID == id);
if (customer == null)
{
return NotFound();
}
var vm = new CustomerViewModel(customer); // ... NRE to be thrown here
return View(vm);
}
即使表中存在此数据,
ID ParentID Name
--------------------------
5 1 ParentCo
7 5 ChildCo
解决方法
尝试
var result = await _context.Customer.Include(x => x.Parent).FirstOrDefaultAsync(x => x.Id == id);
但是如果不起作用
var customer = await _context.Customer.FirstOrDefaultAsync(
.FirstOrDefaultAsync(m => m.ID == id); );
if (customer != null)
{
var parent = await _context.Customer.FirstOrDefaultAsync(x => x.ParentId == customer.Id);
if (parent != null)
{
customer.Parent = parent;
}
}
else
{
return NotFound();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。