gpt4 book ai didi

c# - Entity Framework 6 添加/更新 - 编辑时出错并尝试将编辑后的实体添加为新实体

转载 作者:行者123 更新时间:2023-11-30 22:08:27 25 4
gpt4 key购买 nike

我有一个像下面这样的模型

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 属性上使用 DatabaseGeneratedOption.None 注释。

关于c# - Entity Framework 6 添加/更新 - 编辑时出错并尝试将编辑后的实体添加为新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com