我有一个如下所示的模型
public class XYZModel
{
public string Id; // GUID, primary key;
public string Name;
public string AssociationId; // GUID, AllowNull;
}
我在做什么..
这工作正常
XYZModel abc = new XYZModel();
abc.Id = Convert.ToString(Guid.NewGuid());
abc.Name = "ABC Name";
xyzDbContext.XYZModels.Add(abc);
xyzDbContext.SaveChanges();
我的目标是什么?通过id获取实体,对其进行编辑,更改其主键Id值,并将其添加为新条目。但添加时出现错误。
XYZModel xyz = xyzDbContext.XYZModels.Find("xyzguid");
//modifying it
xyz.AssociationId = xyz.Id;
xyz.Id = Convert.ToString(Guid.NewGuid());
xyz.Name = "New Name";
//trying to add it as new entry
xyzDbContext.XYZModels.Add(xyz);// Error
xyzDbContext.SaveChanges();
它抛出一个错误
属性“Id”是对象关键信息的一部分,无法修改。
最佳答案
仅当 xyz
对象与 Context
分离时,您才能执行此操作。
有两种方法:
XYZModel xyz = xyzDbContext.XYZModels.Find("xyzguid");
xyzDbContext.Entry(xyz).State = EntityState.Detached;
或使用AsNoTracking.FirstOrDefault
XYZModel xyz = xyzDbContext.XYZModels.AsNoTracking().FirstOrDefault(s => s.Id =="xyzguid");
第一种方法的代码:
XYZModel xyz = xyzDbContext.XYZModels.Find("xyzguid");
xyzDbContext.Entry(xyz).State = EntityState.Detached;
//modifying it
xyz.AssociationId = xyz.Id;
xyz.Id = Convert.ToString(Guid.NewGuid());
xyz.Name = "New Name";
//trying to add it as new entry
xyzDbContext.XYZModels.Add(xyz);// No Error
xyzDbContext.SaveChanges();
注意:
您必须在 Id
属性上使用 DatabaseGenerateOption.None
注释。
关于c# - Entity Framework 6 添加/更新 - 编辑时出错并尝试将编辑的实体添加为新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268343/