我正在使用asp .net mvc实体框架。我有一个存储库类,用于初始化构造函数中的实体实例。假设我有一个熟悉的customers表,它在订单表中有1到多行:客户有很多订单。
我尝试了以下两种方式加载与客户相关的订单,但没有成功。
尝试1:使用包含
结果:引发InvalidOperationException“已在此EntityReference上设置了Value属性。无法将多个相关对象添加到EntityReference”。
public List<Customer> GetCustomerList()
{
return _database.CustomerSet.Include("Orders").ToList();
}
尝试2:使用负载
结果:在cust.Orders.Load()
public List<Customer> GetCustomerList()
{
List<Customer> customers = _database.CustomerSet.ToList();
foreach(Customer cust in customers)
{
if(!cust.Orders.IsLoaded)
{
cust.Orders.Load();
}
}
}
有人熟悉这个例外吗?有关这可能是什么原因的任何建议?
使用分析器后,我知道它成功执行此查询以获取所有客户:
SELECT 1 AS [C1], [Extent1].[Name] AS [Name] ....
FROM [dbo].[Customer] AS [Extent1]
执行此查询以获取与第一个客户关联的订单(id = 31):
SELECT 1 AS [C1], [Extent1].[ID] AS [ID] ...
FROM [dbo].[Orders] AS [Extent1]
WHERE [Extent1].[Customer_ID] = 31
在此之后,当它将从此查询中提取的数据与客户模型相关联时,它就会爆炸。
答案 0 :(得分:1)
看起来您的关联是错误的,EF认为客户只能有1个订单。