我已将“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/