2017-08-28 81 views
0

我对ASP.NET很新,我正在为我的小项目创建一个合适的模型。ASP.NET MVC 5/EF6多对多

让我先解释一下这个概念: 我想创建一个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; } 
} 

Reader类:

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

订阅类(第三类,引用Magazine和Reader ID):

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

到目前为止这是否正确?

下一步是创建视图模型我猜:

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的概念。

我会感谢你的每一个评论和tipps。非常感谢。 :d

+0

这与ASP.NET无关,这是实体框架。 –

+0

订阅可以引用Reader和Magazine,而不仅仅是ReaderId和MagazineId。 –

+0

嗨里卡多,谢谢你的回答。 MVVM中的ViewModel是不是与asp.net相关的部分?但是,模型本身就是EF。 – daru

回答

0

李嘉图提到的,你应该在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; } 
} 

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

+0

非常感谢您的回答alxmitch。这帮助了很多:D – daru