我使用Entity Framework处理数据事务,我们有一个用户实体,其主键类型为ID
整数。
在我们的SQL Server中,Identity
规范设置为Yes
,Is 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值作为主键的解决方案。