EF: saveChanges成功,但是只有在编辑现有的引用成员时更改才会反映在DB中

本文关键字:成员 DB 引用 成功 saveChanges EF 编辑 | 更新日期: 2023-09-27 18:10:51

我使用EF。

我有一个名为MamConfiguration_V1Parent实体

它有一个EntityCollection为MamConfigurationToBrowser_V1

我的上下文是mMaMDBEntities

我正在尝试添加一个新的MamConfigurationToBrowser_V1到现有的MamConfiguration_V1

我没有得到错误,但没有记录被添加到DB。

当我更新一个现有的引用成员时,更改将反映在DB中。

我做错了什么?

public MamConfiguration_V1 Save(MamConfiguration_V1 item){

        try
        {
            var itemFromDB = mMaMDBEntities.MamConfiguration_V1.SingleOrDefault(a=> a.ConfigurationId == item.ConfigurationId);
            if (itemFromDB != null)
            {
                UpdateEfBrowsers(itemFromDB, item);
                mMaMDBEntities.SaveChanges();
                return item;
            }
            else
            {
                throw new KeyNotFoundException(string.Format("configurationId = {0} wasn't found in the DB", item.ConfigurationId));
            }
    }
    private void UpdateEfBrowsers(MamConfiguration_V1 itemFromDb, MamConfiguration_V1 itemFromUi)
    {
        foreach (var item in itemFromDb.MamConfigurationToBrowser_V1.ToList())
        {
            if (itemFromUi.MamConfigurationToBrowser_V1.All(b => b.BrowserVersionId != item.BrowserVersionId))
            {
                mMaMDBEntities.MamConfigurationToBrowser_V1.DeleteObject(item);
            }
        }
        for (int i = 0; i < itemFromUi.MamConfigurationToBrowser_V1.Count; i++)
        {
            var element = itemFromUi.MamConfigurationToBrowser_V1.ElementAt(i);
            var item =
                itemFromDb.MamConfigurationToBrowser_V1.SingleOrDefault(b => b.BrowserVersionId == element.BrowserVersionId);
            if (item != null)
            {
                // copy properties from element to item
            }
                //add new
            else
            {
                //element.Browser = mMaMDBEntities.Browsers.Single(browserItem =>
                //                                                 browserItem.BrowserID == element.BrowserID);
                //element.MamConfigurationId = itemFromDb.ConfigurationId;
                element.MamConfiguration_V1 = null;
                mMaMDBEntities.MamConfigurationToBrowser_V1.AddObject(element);
                itemFromDb.MamConfigurationToBrowser_V1.Add(element);
            }
        }
    }

EF: saveChanges成功,但是只有在编辑现有的引用成员时更改才会反映在DB中

for (int i = 0; i < itemFromUi.MamConfigurationToBrowser_V1.Count; i++)
        {

...
                mMaMDBEntities.MamConfigurationToBrowser_V1.AddObject(element);
                itemFromDb.MamConfigurationToBrowser_V1.Add(element);
}

问题是AddObjectAdd

从itemFromUi.MamConfigurationToBrowser_V1.Count中删除一个项目

,从而减少计数。

我不知道为什么。

我已替换为foreach

你需要写

*databasename*.SaveChanges()

添加到数据库后。否则它不会保存