3
我在Entity Framework 4.0模型的每個實體中添加了一個'IsDeleted'列併爲其實現了一個接口。我如何才能完成將'IsDeleted'設置爲'true'的實體被我的模型中的所有Objectset和Navigationproperties忽略?使用LinQ過濾結果不起作用,因爲結果不能轉換回ObjectSet。忽略EF 4.0中導航屬性中標記爲已刪除的記錄
有人可以幫我嗎?
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
目的是我不想丟失已刪除的數據。它不應該(永遠)在GUI上可見。我不認爲我可以用AcceptChanges()來做到這一點。將'WHERE IsDeleted = false'添加到每個查詢中也不是一種選擇,因爲它偶爾會被遺忘。 – FabianAlbrecht 2010-05-20 16:24:03
聽起來好像你正試圖實施一個「存檔」標誌,表明一個實體已被「停用」並且不應該被訪問。這是EF範圍之外的特定於應用程序的要求。如果您不希望過濾像這樣的標誌上的所有查詢,則應考慮將存檔方法*複製*「取消激活」的實體到存檔表。 – 2010-05-20 16:28:10
對這個問題的反應很差。我意識到這是一個古老的問題,但它仍然是一個常見的問題,你的回答基本上說,「我不在乎你在做什麼 - 你做錯了」,你對這種情況太無知了,索賠。如果系統的設計是應用程序不應該意識到軟刪除的記錄,並且這個歸檔過程是由數據庫/數據團隊完成的呢?然後它導致這實際上是一個特定於數據庫的問題,他們試圖使他們的DAL兼容。 – Jaxidian 2011-03-20 17:36:06