我在我的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
答案 0 :(得分:-1)
您的IsDeleted标志的目的是什么?标记为删除的对象的状态由ObjectStateManager更新。通过查询ObjectStateManager,可以确定在调用SaveChanges()
之前是否已将对象标记为删除。
如果要从查询中排除已删除的实体,请调用SaveChanges()
标记它们以进行删除。您还可以使用AcceptChanges()
从集合中删除实体,而不将删除提交到数据库。< / p>