0

我在实施检查以阻止开发人员在初始创建后手动或以编程方式更新代码中的主键时遇到问题。

 partial class User
{
    public User()
    {
        this.UserId = sGuid.NewSGuid(sGuidType.SequentialAtEnd);
    }

    partial void OnUserIdChanging(Guid value)
    {
        //throw if its an edit...
        throw new DbEntityValidationException("Cannot mutate primary key");
    }

}

如果我正在编辑/更新一个对象,这很好用,但它实际上不会让我首先创建一个新实体。有什么方法可以检查它是新实体还是现有实体?

在此先感谢,皮特

更新:

典型的我总是在发布后找到答案 -_- !感谢您的回答家伙,我会将您的其中一个标记为正确答案,因为它们是有效的替代方案。

if (this.EntityState != System.Data.EntityState.Detached)
{
    throw new DbEntityValidationException("Cannot mutate primary key");
}
4

1 回答 1

1

这个问题通常通过制作主键设置器private或来解决protected

public class MyEntity
{
  public int Id { get; private set; }
}

如果您使用的是 EF 设计器,只需在设计器中选择属性并在属性网格中设置适当的访问修饰符 - 您的代码生成器将完成剩下的工作。

于 2013-02-08T14:39:33.107 回答