我正在尝试更新附加了导航属性的实体。
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更新实体就会改变。
我们还有其他解决办法吗?
答案 0 :(得分:3)
肯定有像stock.Locations = myLocationCollection
这样的行导致问题。您想要做的是:
stock.Locations.Clear();
foreach (var loc in myLocationsCollection)
stock.Locations.Add(loc);
这是一种可用于将集合设置为整体的解决方法。