如何将包含自身的实体添加到ICollection MVC

时间:2014-02-18 09:35:18

标签: c# asp.net-mvc icollection

有一篇文章说明了如何做到这一点,但它没有解释如何使用它。

我们有一个英语'Person'的班级“Persoon”(荷兰语),我们想要一个朋友(荷兰语的朋友)加上ICollection,他也是一个'人'

我们的域类Persoon中有以下代码:

 public virtual ICollection<Persoon> Vrienden { get; set; }

这是因为一个人可以有很多朋友(vrienden in Dutch)

为了实现我们的Icollection并创建友谊表,我们使用了以下代码:

 modelBuilder.Entity<Persoon>()
             .HasMany(m => m.Vrienden)
             .WithMany()
             .Map(w => w.ToTable("Vriendschap")
                        .MapLeftKey("PersoonID")
                        .MapRightKey("VriendID"));

现在问题是,我们已经创建了友谊表,但是我们现在如何使用PersoonID(personID)&amp;添加Person到友谊表。 vriendID(friendID)。 我知道你可以使用'vrienden.Add(entity)',但我不知道如何在一个新的控制器中使用ith像friendshipcontroller这是不是必要的?

我们如何在控制器和视图中实现这一点?这样我们就可以添加,编辑,删除en了解集合中的列表?

提前致谢!!

1 个答案:

答案 0 :(得分:1)

CRUD

您可以使用您在问题中提供的示例代码来应用CRUD操作:

创建

person.Vrienden.Add(friend);

读取

person.Vrienden;

更新

person.Vrienden.Remove(friend);
otherPerson.Vrienden.Add(friend);

删除

person.Vrienden.Remove(friend);

直接访问

但是,既然您希望能够查询所有友谊,那么您可能想要的是在您的域模型中实现Friendship概念:

public class Friendship
{
    public Persoon FriendA { get; set; }
    public Persoon FriendB { get; set; }
}

调整Persoon及其映射,以便VriendenICollection<Friendship>。然后将您的映射调整为一对多(一个人有很多友谊)。

现在您可以查询所有友谊并直接将CRUD操作应用于Friendship。请注意,您需要小心防止重复的友谊,因为您可以在同一对朋友之间有两个友谊,但顺序相反。