2011-02-25 57 views
1

我想弄清楚如何在兩個級別保存我的排序。 我的問題如下:爲每個配置文件存儲屬性/類別排序

我有一個配置文件的表。 每個配置文件都有一組與其關聯的屬性。 屬性在配置文件(多對多)之間共享。 每個屬性都屬於一個類別。

不幸的是我不能發佈我的模型的圖像,需要另外9個reputaion點......

我想要做的就是按類別屬性,併爲每個配置文件,保存類別的順序和屬性。

例子:

平臺: 的Windows 蘋果

角色: 建築師 開發 項目負責人

所以在這裏,我想是可以的,比如,更改順序平臺或「平臺」之前出現「角色」。

我想添加一個單獨的表,只是保存類別ID的數組:S和屬性ID:■每個檔案.. 但我不知道是否有更好的方法...

回答

1

好吧,讓我們再試一次:)

我假設你的意思是你想保留實體的順序的例子多對多的關係?

如果是這樣,似乎這是不可能與一個stadard EF多對多連接。相反,您需要在中間添加一個用於存儲序列的附加實體。這不是優雅的,但它可能是唯一的方法。

下面是羅恩·米勒@ MS的一些信息:

在EF真正的多對多(即 沒有加入實體)不能 包含任何有效載荷和 是無序的內容。

添加聯接實體是最佳方式 來實現您所追求的目標。

來源:http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/6fe9f4fc-9979-4885-ad15-8c5ddebb45b1

+0

好的,我會考慮添加一個連接實體.. 謝謝! – bek 2011-03-11 08:16:02

0

你的意思是你想要爲每個對象內的子對象排序嗎?

如果是這樣,有一個小的信息,這可能有助於在這裏(雖然它看起來討厭):

http://weblogs.asp.net/zeeshanhirani/archive/2008/07/28/sorting-child-collections-in-entity-framework.aspx

我犯了一個博客帖子較早,在那裏我 討論瞭如何使用AssociateWith 方法在DataLoadOptions上對 SQL服務器上的子集合進行排序,然後將它們加載到內存中。此 選項僅在linq到 SQL中可用。在實體框架中,爲了 完成對子集 的排序,您必須使用 CreateSourceQuery方法。 CreateSourceQuery返回一個 對象查詢,該對象被轉換爲SQL 併發送到數據庫。所以,如果你 想讓你的孩子的集合被 加載不同,如排序在 不同的順序或應用過濾器,比 你必須得到訪問的ObjectQuery 實例,它是負責 加載孩子子集合和 修改查詢在ObjectQuery執行之前添加訂購 。 EntityCollection上可用的CreateSourceQuery查詢方法爲 ,EntityReference爲 。

下面是說明如何 做

var context = new NorthwindEntities(); 
var cus1 = context.Customers.Single(c => c.CustomerID == "ALFKI"); 
foreach (var order in cus1.Orders.CreateSourceQuery().OrderBy(o => o.ShipCity) 
{ 
     Console.WriteLine(order.ShipCity); 
} 
+0

您好,感謝您的回答。不幸的是,這不會爲我做.. 我會加入到我的問題,並更精確.. – bek 2011-03-10 15:13:53

+0

添加了一個新的答案,而不是編輯這一個,因爲它是離商標英里。希望我理解正確! – 2011-03-10 17:36:22