EF: saveChanges成功,但是只有在编辑现有的引用成员时更改才会反映在DB中
本文关键字:成员 DB 引用 成功 saveChanges EF 编辑 | 更新日期: 2023-09-27 18:10:51
我使用EF。
我有一个名为MamConfiguration_V1
的Parent
实体
它有一个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);
}
}
}
for (int i = 0; i < itemFromUi.MamConfigurationToBrowser_V1.Count; i++)
{
...
mMaMDBEntities.MamConfigurationToBrowser_V1.AddObject(element);
itemFromDb.MamConfigurationToBrowser_V1.Add(element);
}
问题是AddObject
或Add
从itemFromUi.MamConfigurationToBrowser_V1.Count中删除一个项目
,从而减少计数。
我不知道为什么。
我已替换为foreach
你需要写
*databasename*.SaveChanges()
添加到数据库后。否则它不会保存