存储每个配置文件的属性/类别排序

时间:2011-02-25 10:55:22

标签: asp.net-mvc entity-framework sorting

我正在试图找出如何在两个级别保存我的排序。 我的问题如下:

我有一张包含个人资料的表格。 每个配置文件都有一堆与之关联的属性。 属性在配置文件(多对多)之间共享。 每个属性属于一个类别。

不幸的是,我无法发布我的模型的图像,需要另外9个声望点......

我想要做的是按类别分组属性,并为每个配置文件保存类别和属性的顺序。

示例:

平台: 视窗 MAC

作用: 建筑师 开发人员 项目负责人

所以在这里我希望能够,例如,改变平台的顺序或在“平台”之前显示“角色”。

我正在考虑添加一个单独的表,只为每个Profile保存一个CategoryID:s和AttributeID:s的数组。 但我想知道是否有更好的方法......

2 个答案:

答案 0 :(得分:1)

好的,我们再试一次:)

我认为你的意思是你试图保持多对多关系中的实体顺序?

如果是这样的话,似乎这对于标准的EF多对多连接是不可能的。相反,您需要在中间添加一个存储序列的附加实体。这不是很优雅,但它可能是唯一的方法。

以下是Rowan Miller @ MS的一些信息:

  

在EF中真正的多对多(即   没有连接实体)不能   包含任何有效负载和内容   没有订购。

     

添加连接实体是最好的方法   实现你的目标。

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

答案 1 :(得分:0)

你的意思是你想在每个对象中订购子对象吗?

如果有的话,这里有一些信息可能会有所帮助(虽然看起来很讨厌):

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

  

我之前发过一篇博文,我在哪里   讨论了如何使用AssociateWith   要对DataLoadOptions进行排序的方法   SQL服务器上的子集合   它们被加载到内存中。这个   选项仅适用于linq   SQL。在实体框架中,为了   完成对孩子的排序   收藏,你必须使用   CreateSourceQuery方法。   CreateSourceQuery返回一个   objectquery转换为SQL   并发送到数据库。所以,如果你   想要你的孩子收藏   加载不同,例如在a中排序   不同的顺序或应用过滤器,比   你必须访问ObjectQuery   负责的实例   加载子子集合和   修改查询以添加排序   在ObjectQuery执行之前。   CreateSourceQuery查询方法是   可在EntityCollection和   的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);
}