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

时间:2010-05-20 11:48:39

标签: .net database entity-framework

我在我的Entity Framework 4.0模型中为每个实体添加了一个“IsDeleted”列,并为它实现了一个接口。我如何才能实现将'IsDeleted'设置为'true'的实体被模型中的所有Objectsets和Navigationproperties忽略?使用LinQ过滤结果我觉得不行,因为结果无法转换回ObjectSet。

有人可以帮帮我吗?

BTW:我的模板在上下文类中生成了ObjectSets,如下所示:

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

1 个答案:

答案 0 :(得分:-1)

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

如果要从查询中排除已删除的实体,请调用SaveChanges()标记它们以进行删除。您还可以使用AcceptChanges()从集合中删除实体,而不将删除提交到数据库。< / p>