EF 6.0代码优先:违反了多重性约束.关系的作用
本文关键字:多重性 约束 关系 作用 代码 EF | 更新日期: 2023-09-27 18:19:10
很多人已经问过类似的问题,但我可以从这些问题和答案中找出我的问题。这就是我的问题
我想要的:
一次插入和更新相同实体类型的不同实例
我做了:
我的实体:
public partial class Record
{
public long Id { get; set; }
public string Name { get; set; }
.....
.....
}
我试过了:
下面的函数将做的是,它将更新传递的客户端,并从中进行深度复制,并尝试保存为新副本。
private void CreateRecord(Record data)
{
// Update
_dbSet.Attached(data); /*OR*/ // _dbSet.Entry(client).State = EntityState.Modified;
// Insert Copy
var newData= data.DeepCopy(); // DeepCopy is custom extension function
newData.Id = 0;
_dbSet.Add(newData);
context.SaveChanges();
}
// Invoking above function
CreateRecord(new Record(){Name="xyz", Id =123 });
只是为了让你的问题正确,你的解决方案不起作用,对吗?
首先,你能把你的DeepCopy()函数添加到你的问题中吗?
尝试改变你的更新实体的状态,以及(两者,不像在你的解决方案"OR"):
Context.Entry(entityToUpdate).State = EntityState.Modified;
另一个解决方案是:
private void CreateRecord(Record data)
{
// Update
_dbSet.Attached(data);
context.Entry(data).State = EntityState.Modified;
// Insert Copy
var newData = new Record();
newData.Name = data.Name;
_dbSet.Add(newData);
context.SaveChanges();
}
ID将由框架/数据库自动添加,因为它是主键。因为它的名字("id"),它将被自动递增和唯一