在我正在開發的一個項目中,我們使用了選項卡。這些標籤包含內容。多個內容對象可以在選項卡上。所以我們可以有一個'汽車'標籤,那個汽車標籤可以顯示一個轎車內容對象,一個suv內容對象和一個卡車內容對象。用戶也可以指定它包含更多或更少的這些對象,然後根據需要訂購它們。對於我們來說,維護這些內容對象的順序對用戶規範非常重要。使用AsList()的流利nHibernate根據SortOrder返回空對象
這裏是我的映射:
在標籤映射:
HasManyToMany(t => t.ContentObjects)
.Table("TabContentObjects")
.ParentKeyColumn("TabID")
.ChildKeyColumn("ContentObjectID")
.AsList(index => index.Column("SortOrder"));
在ContentObject映射:
HasManyToMany(c => c.Tabs)
.Table("TabContentObjects")
.ParentKeyColumn("ContentObjectID")
.ChildKeyColumn("TabID")
.Cascade.SaveUpdate()
.AsList(index => index.Column("SortOrder"));
關聯表是:
TabContentObjectId TabId ContentObjectId SortOrder int not null
我可以添加一個內容對象,在 選項卡內重新排序內容對象,並且一切正常。 nHibernate正在適當地添加/更新SortOrder 。當我嘗試刪除內容 對象時,問題就出現了。當我去從這個contentObject中刪除標籤時,contentObject.Tabs看起來很奇怪。
這裏是我使用刪除的選項卡中的代碼:
//Need to remove each through the contentObject since it is parent
foreach (Tab tab in deleteContentObject.Tabs)
{
tab.RemoveContentObject(deleteContentObject);
}
//in Tab class
public virtual void RemoveContentObject(TabContentObject item)
{
if (ContentObjects == null) ContentObjects = new List<TabContentObject>();
ContentObjects.Remove(item);
}
如果它是唯一的,或所述第一(SortOrder的= 0)一標籤中contentObject,我可以刪除。如果它是第二個內容對象,contentObject.Tabs看起來像[0] [null],[1] [Tab]。如果它是選項卡上的第四個contentObject,則contentObject.Tabs看起來像[0] [null],[1] [null],[2] [null],[3] [Tab]。所以,根據SortOrder列在關聯表中的含義,我似乎有很多返回的空引用,因此無法由於空引用而被刪除。我無法弄清楚爲什麼這些空值被返回。任何幫助,將不勝感激。