Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多对多(自相关)特定订单实体框架_C#_Entity Framework_Many To Many_Self Reference - Fatal编程技术网

C# 多对多(自相关)特定订单实体框架

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设置默认订单。我的工作是扩展生成的类,以便为好友创建一个新属性 还有谁有更好的想法吗?

你好,我想做不可能的事

首先,我需要一个与自身有多对多关系的自引用表,该表在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之外,似乎没有答案,我不想为此绞尽脑汁好几天。