我正在尝试弄清楚如何在两个级别上保存我的排序。我的问题如下:
我有一张有档案的桌子。每个概要文件都有一堆与之关联的属性。属性在配置文件之间共享(多对多)。每个属性都属于一个类别。
不幸的是,我不能发布我的模型的图像,需要另外9个名誉点…
我想要做的是按类别对属性进行分组,并为每个配置文件保存类别和属性的顺序。
示例:
平台: Windows Mac
角色:架构师、开发人员、项目负责人
所以在这里,我希望能够,例如,改变平台的顺序,或者让“角色”显示在“平台”之前。
我在考虑添加一个单独的表,并为每个配置文件保存一个CategoryID:s和AttributeID:s数组。但我想知道有没有更好的方法..。
发布于 2011-03-11 01:34:40
好的,让我们再试一次:)
我想你的意思是你试图在多对多的关系中保持实体的顺序?
如果是这样的话,使用标准的EF多对多连接似乎是不可能的。相反,您需要在中间添加一个额外的实体,用于存储序列。这并不优雅,但这可能是唯一的方法。
以下是来自Rowan Miller @MS的一些信息:
EF中的
是一个真正的多对多(即没有连接实体),不能包含任何有效负载,并且内容没有排序。
添加连接实体是实现目标的最佳方式。
来源:http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/6fe9f4fc-9979-4885-ad15-8c5ddebb45b1
发布于 2011-03-06 03:08:08
您的意思是要对每个对象中的子对象进行排序?
如果是这样,这里有一些信息可能会有所帮助(尽管它看起来很糟糕):
http://weblogs.asp.net/zeeshanhirani/archive/2008/07/28/sorting-child-collections-in-entity-framework.aspx
我之前写了一篇博文,讨论了如何在DataLoadOptions上使用AssociateWith方法对子集合进行排序,然后再将其加载到内存中。此选项仅在linq to SQL中可用。在实体框架中,为了完成对子集合的排序,必须使用CreateSourceQuery方法。CreateSourceQuery返回一个对象查询,该对象查询被转换为SQL并发送到数据库。因此,如果您希望以不同的方式加载子集合,例如以不同的顺序排序或应用筛选器,则必须访问负责加载子集合的ObjectQuery实例,并在执行ObjectQuery之前修改查询以添加排序。EntityCollection和EntityReference上提供了CreateSourceQuery查询方法。
下面是一个示例,说明了如何做到这一点
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);
}https://stackoverflow.com/questions/5116364
复制相似问题