【问题标题】:How to add entity that contains itself to ICollection MVC如何将包含自身的实体添加到 ICollection MVC
【发布时间】:2014-02-18 09:35:18
【问题描述】:

有一篇文章说明了如何执行此操作,但没有说明如何使用它。

我们有一个英语“Person”的类“Persoon”(荷兰语),我们想添加一个朋友(荷兰语中的朋友),其 ICollection 也是一个“Person”

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

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

这是因为一个人可以有很多朋友(荷兰语为 vrienden)

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

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

现在的问题是,我们已经创建了友谊表,但是我们现在如何使用 PersoonID (personID) 和 vriendID (friendID) 将 Person's 添加到友谊表中。 我知道你可以使用'vrienden.Add(entity)',但我不知道如何在新控制器中使用它,比如friendshipcontroller,这不是必需的吗?

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

提前致谢!!

【问题讨论】:

  • 我认为您的要求并不明确。您到底想在您还不了解的控制器和视图中做什么?您是否要求某人实现一些为友谊提供 CRUD 功能的控制器和视图?
  • list from the collection 是什么意思?
  • @Sam 好吧,你可以这么说,我不知道如何为这个 Icollection 制作 CRUD 功能。我必须为这些动作制作一个新的控制器吗?如何将朋友添加到一个人的朋友收藏中?我希望这会有所帮助?
  • @Sam 我的意思是一个列表或表格,其中显示了集合中的所有值,“Person”-“Friend”彼此相邻
  • 您能否更新问题的标签以显示您正在使用的 ORM 工具?

标签: c# asp.net-mvc icollection


【解决方案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 及其映射,使Vrienden 成为ICollection&lt;Friendship&gt;。然后将您的映射调整为一对多(一个人有很多朋友)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多