实体框架OnChanging保护主键

本文关键字:保护 OnChanging 框架 实体 | 更新日期: 2023-09-27 17:58:16

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

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

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

提前感谢,Pete

更新:

典型的我总是在我发帖后找到答案------!谢谢你的回答,伙计,我会把你的一个答案标记为正确答案,因为它们是有效的替代答案。

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

实体框架OnChanging保护主键

这个问题通常通过使主键设置器privateprotected:来解决

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

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