EF 6.0 Code First:违反了多重约束。关系的作用

时间:2014-08-22 12:43:55

标签: c# entity-framework c#-4.0 ef-code-first

很多人已经问过几乎相似的问题,但我可以从这些问题和问题中找出问题所在。所以这是我的问题

我想要的是什么:

一次性插入和更新同一实体类型的不同实例。

我做了什么:

我的实体:

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

1 个答案:

答案 0 :(得分:0)

为了解决您的问题,您的解决方案无法正常运作?

首先,你可以在你的问题中添加DeepCopy()函数吗?

尝试更改已更新实体的状态(两者,不像解决方案中那样"或"):

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"),它将自动递增并且是唯一的。