无法设置类型属性,因为集合已设置为EntityCollection

时间:2014-05-01 13:47:50

标签: c# asp.net-mvc entity-framework entity

我正在尝试更新附加了导航属性的实体。

public partial class Stock
{
    #region Primitive Properties

    public virtual int StockId
    {
        get;
        set;
    }

    public virtual string StockName
    {
        get;
        set;
    }

    #endregion

    #region Navigation Properties

    public virtual ICollection<Location> Locations
    ...
}

当我在数据库中插入实体时,这很有效,但是当我更新时,我得到错误:

  

发生了'System.InvalidOperationException'类型的异常   EntityFrameworkDynamicProxies-Trade.Sales.Presentation.Admin但是   未在用户代码中处理

     

其他信息:类型属性'地点'   'Stock_4654D170FFCE308BB1B9AF1E2018476DF2E1C2E1DBA137F58AB96BCB9FAFC859'   无法设置因为集合已设置为   EntityCollection。

我浏览了一些其他帖子,但给出的解决方案是:

将属性修改为非虚拟属性,即删除“virtual”关键字。但是我的大四学生说这不能被接受,因为这个类是自动生成的,并且一旦从DB更新实体就会改变。

我们还有其他解决办法吗?

1 个答案:

答案 0 :(得分:3)

肯定有像stock.Locations = myLocationCollection这样的行导致问题。您想要做的是:

stock.Locations.Clear(); 
foreach (var loc in myLocationsCollection) 
    stock.Locations.Add(loc); 

这是一种可用于将集合设置为整体的解决方法。