我正在试图找出如何在两个级别保存我的排序。 我的问题如下:
我有一张包含个人资料的表格。 每个配置文件都有一堆与之关联的属性。 属性在配置文件(多对多)之间共享。 每个属性属于一个类别。
不幸的是,我无法发布我的模型的图像,需要另外9个声望点......
我想要做的是按类别分组属性,并为每个配置文件保存类别和属性的顺序。
示例:
平台: 视窗 MAC
作用: 建筑师 开发人员 项目负责人
所以在这里我希望能够,例如,改变平台的顺序或在“平台”之前显示“角色”。
我正在考虑添加一个单独的表,只为每个Profile保存一个CategoryID:s和AttributeID:s的数组。 但我想知道是否有更好的方法......
答案 0 :(得分:1)
好的,我们再试一次:)
我认为你的意思是你试图保持多对多关系中的实体顺序?
如果是这样的话,似乎这对于标准的EF多对多连接是不可能的。相反,您需要在中间添加一个存储序列的附加实体。这不是很优雅,但它可能是唯一的方法。
以下是Rowan Miller @ MS的一些信息:
在EF中真正的多对多(即 没有连接实体)不能 包含任何有效负载和内容 没有订购。
添加连接实体是最好的方法 实现你的目标。
来源:http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/6fe9f4fc-9979-4885-ad15-8c5ddebb45b1
答案 1 :(得分:0)
你的意思是你想在每个对象中订购子对象吗?
如果有的话,这里有一些信息可能会有所帮助(虽然看起来很讨厌):
我之前发过一篇博文,我在哪里 讨论了如何使用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);
}