【问题标题】:ASP.NET MVC 5 / EF6 Many-to-ManyASP.NET MVC 5 / EF6 多对多
【发布时间】:2017-08-30 10:51:44
【问题描述】:

我是 ASP.NET 的新手,我正在尝试为我的小项目创建一个合适的模型。

让我先解释一下这个概念: 我想创建一个 ASP.NET 应用程序来管理我的用户获得的杂志和论文。我还想将用户分配给杂志。很简单。一个杂志/论文可以有多个用户(读者),一个用户可以有多个他阅读的杂志。这就是为什么它对我来说是多对多的关系。

我阅读了一些关于代码优先多对多关系的教程,据我所知,我需要一个包含 MagazineId 和 ReaderId 的第三类。想请教各位大佬这样的做法是否正确:

杂志类:

[Table("MA_Magazine")]
public class Magazine
{
    public int MagazineId { get; set; }
    public string MagazineTitle { get; set; }
    public string Notice { get; set; }

    public virtual ICollection<Subscription> Subscriptions { get; set; }
}

阅读器类:

[Table("MA_Reader")]
public class Reader
{
    public int ReaderId { get; set; }
    public string ReaderName { get; set; }
    public string Department { get; set; }

    public virtual ICollection<Subscription> Subscriptions { get; set; }
}

订阅类(第三类,同时引用杂志和读者 ID):

public class Subscription
{
    public int SubscriptionId { get; set; }
    public int MagazineId { get; set; }
    public int ReaderId { get; set; }
}

到目前为止这是正确的吗?

下一步是创建我猜的 Viewmodel:

public class viewAllModel
{
    public int MagazineId { get; set; }
    public string MagazineTitle { get; set; }
    public string Notice { get; set; }

    public int ReaderId { get; set; }
    public string ReaderName { get; set; }
    public string Department { get; set; }
}

如果我想列出所有杂志及其读者用户,并可能实施多选列表以将用户分配给杂志,我必须将 IEnumerable 放在哪里?抱歉,我对此感到很困惑,我敢打赌有一个简单的解决方案,但正如我所说,我对这一切都很陌生,我还不完全理解 Viewmodels 的概念。

感谢您的每一条评论和提示。太感谢了。 :D

【问题讨论】:

  • 这与ASP.NET无关,这是Entity Framework。
  • 订阅可以引用 Reader 和 Magazine 而不仅仅是 ReaderId 和 MagazineId。
  • 嗨,里卡多,感谢您的回答。 Viewmodel 部分 asp.net 不是与 MVVM 相关吗?但是,是的,模型本身就是 EF。
  • 是的,你说得对。

标签: c# asp.net entity-framework-6


【解决方案1】:

正如 Ricardo 所说,您应该在 Subscription 中添加对 MagazineReader 的引用,如下所示:

public class Subscription
{
    public int SubscriptionId { get; set; }
    public int MagazineId { get; set; }
    public int ReaderId { get; set; }

    [ForeignKey("MagazineId")]
    public Magazine Magazine { get; set; }
    [ForeignKey("ReaderId")]
    public Reader Reader { get; set; }
}

为了将读者分配给杂志,您可以使用多选或复选框列表 - 有一个页面允许您将 Magazines 分配给 Reader。在此页面上,您将显示所有 Magazines 的列表以允许它们被选中,然后为每个选中的项目创建一个 Subscription 对象。

【讨论】:

  • 非常感谢您的回答 alxmitch。这有很大帮助:D
猜你喜欢
  • 2015-09-30
  • 2020-09-04
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多