【问题标题】:Entity Framework. Detecting if an Entity is loading from the database实体框架。检测实体是否从数据库加载
【发布时间】:2019-07-17 19:27:37
【问题描述】:

是否可以通过实体框架检测是否正在从数据库中填充实体?

在某些属性的 Setter 中,如果属性是由 UI 设置的,我有需要运行的逻辑,但如果它是由从数据库加载的 EF 设置的,则不需要运行。

这有几个原因。

我正在设置器中进行一些强制验证,这些设置器依赖于在 EF 填充属性时可能尚未初始化的其他属性。

我希望保留从数据库加载的值,否则这些值会被逻辑强制设置。

编辑: 回到 EF 之前的过去,我们有自己的框架。所有实体都有一个属性“Loaded”,框架在完成初始化实体后将其设置为 true。这就是我希望在 EF 中做的事情。

【问题讨论】:

  • 不能用这些实体的id属性吗?
  • 这正是您不应该在 setter 中进行验证的原因。从数据库读取时进行验证是不好的做法(您应该始终能够将数据库内容视为有效)并且可能是性能杀手。您必须在保存实体之前将其作为一个整体进行验证,例如通过使其实现IValidatableObject。换句话说,你不应该需要你所要求的。

标签: c# entity-framework-6


【解决方案1】:

您可以在上下文中使用Entry() 方法来获取有关给定实体的信息。使用它来获取实体的state。对照状态 UnchangedModified 检查它是否是数据库中的实体。

EntityState state = context.Entry(yourObject).State;
if (state == EntityState.Unchanged || state == EntityState.Modified) {
    // do something
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多