繁体   English   中英

ASP.NET MVC 5 / EF6多对多

[英]ASP.NET MVC 5 / EF6 Many-to-Many

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

正如Ricardo所述,您应该在Subscription添加对Magazine and Reader引用,如下所示:

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对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM