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 });

EF 6.0代码优先:违反了多重性约束.关系的作用

只是为了让你的问题正确,你的解决方案不起作用,对吗?

首先,你能把你的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"),它将被自动递增和唯一