EF。更新。违反UNIQUE KEY约束

时间:2013-12-19 12:56:01

标签: c# entity-framework primary-key

在更新获取错误期间:

Violation of UNIQUE KEY constraint 'IX_UniqueClientRequest'. Cannot insert duplicate key in object 'dbo.ClientRequest'. The duplicate key value is (0067f654-a06a-47c1-a13d-d5f35530c11b, -1).

声明已经终止。

这是我正在使用的代码:

public class ClientRequestData
{
    public Guid Id { get; set; }

    public ClientData Client { get; set; }
}

public class ClientRequestDataConfig : EntityTypeConfiguration<ClientRequestData>
{
    public ClientRequestDataConfig()
    {
        ToTable("ClientRequest");

        HasRequired(r => r.Client)
            .WithMany(c => c.ClientRequests)
            .Map(m => m.MapKey("IdClient"))
            .WillCascadeOnDelete(false);
    }
}


public void Save(ClientRequestData request)
    {
        using (DbContext context = new DbContext())
        {

            request.Client = context.Clients.FirstOrDefault(c => c.Id == request.Client.Id);

            //Insert
            if (request.Id == Guid.Empty)
            {
                request.Id = Guid.NewGuid();
                context.ClientRequests.Add(request);
            }
            //Update
            else
            {
                ClientRequestData dbRequest = context.ClientRequests.FirstOrDefault(cr => cr.Id == request.Id);

                dbRequest.Client = request.Client;
            }
            context.SaveChanges();
        }
    }

如何更改客户端实体状态,因此仅更新引用,而不是尝试创建新客户端?

1 个答案:

答案 0 :(得分:0)

您需要将现有对象附加到上下文,而不是分配它。

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.addobject(v=vs.110).aspx