繁体   English   中英

如何在Entity Framework中禁用插入?

[英]How to disable insert in Entity Framework?

有没有办法禁止在实体框架中插入实体?

我正在使用DDD,并且在特定的有界上下文中,users表的一些必需数据库字段没有意义(在此上下文中)。 所以,我想从User实体中删除它们,但是这样做我失去了将用户保存到数据库的能力。 哪个是好的,因为在这种情况下,我不应该创建用户。

我的第一个想法是禁用用户实体上的插入(但允许更新)。

这可行吗? 或者,这种情况还有另一种解决方案吗?

您无法禁用插入,但在这种情况下,您可以找到是否标记了插入和触发异常的任何实体。

执行此类处理的最佳位置是覆盖SaveChanges方法:

public override int SaveChanges(SaveOptions options)
{
    if (ObjectStateManager.GetObjectStateEntries(EntityState.Added)
                          .Where(e => !e.IsRelationship)
                          .Select(e => e.Entity)
                          .OfType<User>()
                          .Any())
    {
        throw new InvalidOperationException("User cannot be inserted");
    }

    return base.SaveChanges(options);
}

这是运行时行为,但由于EF在修改操作之间没有差异(所有都在单个SaveChanges ),因此无法在编译时检测插入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM