C# 多对多(自相关)特定订单实体框架
你好,我想做不可能的事 首先,我需要一个与自身有多对多关系的自引用表,该表在c#entity framework(4.2)数据库中也有特定的顺序 把它想象成朋友拥有朋友,他们在朋友中排列他们的友谊>最好的朋友到最坏的朋友 在不使用“FriendToFriend”关系实体的情况下,是否仍可以执行此操作?我希望能够使用Friend.Friends(删除order列会创建它),但我会基于他们的FriendsOrder设置默认订单。我的工作是扩展生成的类,以便为好友创建一个新属性C# 多对多(自相关)特定订单实体框架,c#,entity-framework,many-to-many,self-reference,C#,Entity Framework,Many To Many,Self Reference,你好,我想做不可能的事 首先,我需要一个与自身有多对多关系的自引用表,该表在c#entity framework(4.2)数据库中也有特定的顺序 把它想象成朋友拥有朋友,他们在朋友中排列他们的友谊>最好的朋友到最坏的朋友 在不使用“FriendToFriend”关系实体的情况下,是否仍可以执行此操作?我希望能够使用Friend.Friends(删除order列会创建它),但我会基于他们的FriendsOrder设置默认订单。我的工作是扩展生成的类,以便为好友创建一个新属性 还有谁有更好的想法吗?
还有谁有更好的想法吗?实体框架不支持有序集合。这是EF显示其不成熟的许多情况之一 如果可行,请尝试nHibernate。它
使用EF,您将必须使用额外的列映射中间表,并根据您的逻辑手动调整顺序。我知道我做得晚了,但当将其设计为数据模型时,我更希望添加一个关系表,并且该关系表应具有定义顺序的属性(例如,最坏的朋友是0,最好的是100) 然后,在EF中,如果我正在检索的列表应该是该顺序的,我将显式地按该属性排序 这意味着无论您使用何种方法来查询数据,都可以始终如一地使用这种关系。因此,如果您使用EF,您可以使用它(虽然,是的,它没有Friend.Friends那么方便,但是代码将更清楚地说明它的意图-Friend.FriendRelationships.Select(p=>p.Friend.OrderBy(p=>p.OrderValue)),如果您使用的是直接SQL,那么您也可以使用它 如果我在代码中遇到Friend.Friends,我不知道会对它应用什么排序 如果您必须拥有它,您可以始终将其添加为非db属性-
public class Friend
{
public virtual List<FriendRelationship> UnorderedFriendList { get; set; }
[NotMapped]
public IEnumerable<Friend> Friends
{
get
{
return UnorderedFriendList.Select(p => p.Friend).OrderByDescending(p => p.OrderValue);
}
}
}
公共类好友
{
公共虚拟列表无序Friendlist{get;set;}
[未映射]
无数的朋友
{
得到
{
返回无序的Friendlist.Select(p=>p.Friend.OrderByDescending(p=>p.OrderValue);
}
}
}
感谢您的回复。我基本上必须按照我在问题中描述的方式来解决这个问题。我希望更多的人会回答,但除了大幅修改SSDL之外,似乎没有答案,我不想为此绞尽脑汁好几天。