EntityCollection已经初始化

时间:2013-04-21 07:14:46

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

我正在尝试更新现有实体

private void UpdateEfItem(MamConfiguration_V1 itemFromDb, MamConfiguration_V1 item)
{
    itemFromDb.UpdatedDate = DateTime.Now;
    itemFromDb.Description = item.Description;


   //references
   itemFromDb.MamConfigurationToBrowser_V1 = item.MamConfigurationToBrowser_V1;
   itemFromDb.MamConfigurationToGroups_V1 = item.MamConfigurationToGroups_V1;
}

将Ui-Item分配给Ef-item时出现以下错误:

itemFromDb.MamConfigurationToBrowser_V1 = item.MamConfigurationToBrowser_V1;
  

EntityCollection已初始化。该   只应调用InitializeRelatedCollection方法进行初始化   在对象图的反序列化过程中使用新的EntityCollection

更新

我试过@ Gert的方式:

    private void UpdateEfItem(MamConfiguration_V1 itemFromDb, MamConfiguration_V1 item)
    {
        itemFromDb.UpdatedDate = DateTime.Now;

        itemFromDb.Description = item.Description;

        itemFromDb.StatusId = item.StatusId;

        itemFromDb.Name = item.Name;

        itemFromDb.NumericTraffic = item.NumericTraffic;

        itemFromDb.PercentageTraffic = item.PercentageTraffic;

        itemFromDb.Type = item.NumericTraffic;



        itemFromDb.MamConfigurationToBrowser_V1.Clear();

        for (int i = 0; i < item.MamConfigurationToBrowser_V1.Count; i++)
        {
            var elementToAdd = item.MamConfigurationToBrowser_V1.ElementAt(i);

            elementToAdd.Browser = mMaMDBEntities.Browsers.Single(browserItem => browserItem.BrowserID == elementToAdd.BrowserID);

            elementToAdd.MamConfiguration_V1 = itemFromDb;

            itemFromDb.MamConfigurationToBrowser_V1.Add(elementToAdd);
        }

并收到以下错误:

仅在添加clearadd命令时

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

2 个答案:

答案 0 :(得分:0)

尝试:

itemFromDb.MamConfigurationToBrowser_V1.Clear();

foreach (var item in item.MamConfigurationToBrowser_V1)
{
     itemFromDb.MamConfigurationToBrowser_V1.Add(item);
}

答案 1 :(得分:0)

可能发生的事情是SignalData在循环期间间接地改变了引擎盖下的订阅者字典并导致该消息。您可以通过更改

来验证这一点

试试这个

 itemFromDb.MamConfigurationToBrowser_V1.Clear();

 foreach (var item in item.MamConfigurationToBrowser_V1.ToList()) //.ToList()
 {
    itemFromDb.MamConfigurationToBrowser_V1.Add(item);
 }