C# 实体框架。检测是否正在从数据库加载实体

C# 实体框架。检测是否正在从数据库加载实体,c#,entity-framework-6,C#,Entity Framework 6,是否可以通过实体框架检测是否正在从数据库填充实体 在某些属性的Setter中,如果属性是由UI设置的,则需要运行逻辑,但如果属性是由数据库中的EF加载设置的,则不需要运行逻辑 EntityState state = context.Entry(yourObject).State; if (state == EntityState.Unchanged || state == EntityState.Modified) { // do something } 这有几个原因 我正在设置器中执

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

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

EntityState state = context.Entry(yourObject).State;
if (state == EntityState.Unchanged || state == EntityState.Modified) {
    // do something
}
这有几个原因

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

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

编辑: 回到EF之前,我们有自己的框架。所有实体都有一个属性“Loaded”,框架在初始化完实体后将该属性设置为true。这就是我希望在EF中执行的操作。

您可以在上下文中使用该方法来获取有关给定实体的信息。使用它来获取实体的名称。对照状态
Unchanged
Modified
检查它是否是数据库中的实体

EntityState state = context.Entry(yourObject).State;
if (state == EntityState.Unchanged || state == EntityState.Modified) {
    // do something
}
您可以在上下文中使用该方法来获取有关给定实体的信息。使用它来获取实体的名称。对照状态
Unchanged
Modified
检查它是否是数据库中的实体

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

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