使用guid和EntityState删除和修改实体框架

时间:2015-03-20 13:14:43

标签: entity-framework guid

我使用Entity Framework处理数据事务,我们有一个用户实体,其主键类型为ID整数。

在我们的SQL Server中,Identity规范设置为YesIs Identity也设置为yes,自动增量为1.

要删除用户,我使用了以下代码:

ctx.Users.Attach(user);
ctx.Entry(user).State = EntityState.Deleted;
ctx.SaveChanges();

但是,我们已将用户实体更改为将Guid作为主键:

public class User
{
        DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public Guid ID { get; set; }        
        public string Username { get; set; }
}

在数据库中,它被设置为数据类型uniqueidentifier,其中包含"默认值或绑定"设置为(newsequentialid())

更改此设置后,删除用户的实体框架代码会引发以下错误:

  

附加类型为' Administration.Model.User'的实体。失败,因为同一类型的另一个实体已具有相同的主键值。使用'附加'方法或将实体的状态设置为“未更改”#39;或者'修改'如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用'添加'方法或“添加”#39;实体状态跟踪图形,然后将非新实体的状态设置为“未更改”。或者'修改'酌情。

为什么会抛出此错误?我想它与生成主键的方式有关,但我该如何解决这个问题呢?

当然,我可以使用linq查询并使用.Remove,但我想保留使用int值作为主键的解决方案。

0 个答案:

没有答案