ASP.NET MVC 5 / EF6多对多

时间:2017-08-28 10:05:05

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

我是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

1 个答案:

答案 0 :(得分:0)

正如里卡多所提到的,你应该在Magazine中添加对ReaderSubscription的引用,如下所示:

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; }
}

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