尝试加载子表时实体框架抛出InvalidOperationException

时间:2009-12-30 19:21:07

标签: asp.net-mvc entity-framework exception

我正在使用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

在此之后,当它将从此查询中提取的数据与客户模型相关联时,它就会爆炸。

1 个答案:

答案 0 :(得分:1)

看起来您的关联是错误的,EF认为客户只能有1个订单。