2011-02-25 58 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