.net - 忽略在 EF 4.0 的导航属性中标记为已删除的记录

标签 .net database entity-framework

我已将“IsDeleted”列添加到我的 Entity Framework 4.0 模型中的每个实体,并为其实现了一个接口(interface)。我怎样才能做到“IsDeleted”设置为“true”的实体被模型中的所有对象集和导航属性忽略?我认为使用 LinQ 过滤结果是行不通的,因为结果无法转换回 ObjectSet。

有人能帮帮我吗?

顺便说一句:我的模板在上下文类中生成 ObjectSet,如下所示:

Private _Persons As ObjectSet(Of Person)
Public ReadOnly Property Persons() As ObjectSet(Of Person)
    Get
        If (_Persons Is Nothing) Then
            _Persons = MyBase.CreateObjectSet(Of Person)("Persons")
        End If
        Return _Persons
    End Get
End Property

和像这样的实体的导航属性:

<XmlIgnoreAttribute()>
<SoapIgnoreAttribute()>
<DataMemberAttribute()>
<EdmRelationshipNavigationPropertyAttribute("Model", "Map_Persons_Organisations", "Persons")>
 Public Property Persons() As EntityCollection(Of Person)
    Get
        Return CType(Me,IEntityWithRelationships).RelationshipManager.GetRelatedCollection(Of Person)("Model.Map_Persons_Organisations", "Persons")
    End Get
    Set
        If (Not value Is Nothing)
            CType(Me, IEntityWithRelationships).RelationshipManager.InitializeRelatedCollection(Of Person)("Model.Map_Persons_Organisations", "Persons", value)
        End If
    End Set
End Property

最佳答案

您的 IsDeleted 标志的用途是什么?标记为删除的对象的状态由 ObjectStateManager 更新.您可以通过查询 ObjectStateManager 来确定在调用 SaveChanges() 之前对象是否已标记为删除。

如果您想从查询中排除已删除的实体,请调用 SaveChanges() 将它们标记为删除。您还可以使用 AcceptChanges() 从查询中删除实体收集而不将删除提交到数据库。

关于.net - 忽略在 EF 4.0 的导航属性中标记为已删除的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2873336/

相关文章:

c# - 使用linq无需select直接更新

c# - 排除目录循环中的子目录

java - 在java中协调保存在数据库和磁盘中

mysql - 如何避免数据库模型中的冗余?

c# - 跟踪 .ToListing EF Linq 查询之前匹配的表达式数量

c# - EF,代码优先 - 如何在插入时设置自定义 Guid 标识值

c# - EF LINQ ToList 非常慢

c# - 多用户数据库桌面应用程序设计

entity-framework - 我可以使用 Entity Framework (模型优先)来生成组合键吗?

c# - 大型集合的 LINQ 性能