ASP.NET MVC3 EF Code First - 多对多关系
我尝试首先在我的 MVC 项目中使用 EF 代码创建多对多关系。我有一个场景,我有一个服务,它可以有许多类别,其中可能有许多子类别。这一点似乎工作正常。
每个服务、类别和子类别还可以有许多与其关联的 HelpDeskMember。这就是我在创建关联时遇到困难的地方。对于下面的类,我期望 EF 创建 Service_HelpDeskMembers、Category_HelpDeskMembers 和 Subcategory_HelpDeskMembers 表。请有人指导我正确的方向吗?
PS 在导航属性中,我没有使用虚拟,因为我使用 AJAX 和 JSON 在服务/类别/子类别之间创建级联下拉列表,并且通过使用“虚拟”,我收到了循环引用错误。
这是我的课程。
public class Service
{
[Key]
public int ServiceID { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public HelpDeskMember CreatedBy { get; set; }
public DateTime? DeletedDate { get; set; }
public HelpDeskMember DeletedBy { get; set; }
public ICollection<Category> Categories { get; set; }
public ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}
public class Category
{
[Key]
public int CategoryID { get; set; }
[ForeignKey("Service")]
public int ServiceID { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public HelpDeskMember CreatedBy { get; set; }
public DateTime? DeletedDate { get; set; }
public HelpDeskMember DeletedBy { get; set; }
public Service Service { get; set; }
public ICollection<Subcategory> Subcategories { get; set; }
public ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}
public class Subcategory
{
[Key]
public int SubcategoryID { get; set; }
[ForeignKey("Category")]
public int CategoryID { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public HelpDeskMember CreatedBy { get; set; }
public DateTime? DeletedDate { get; set; }
public HelpDeskMember DeletedBy { get; set; }
public Category Category { get; set; }
public ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}
public class HelpDeskMember
{
public int HelpDeskMemberID { get; set; }
public string Name { get; set; }
public bool Admin { get; set; }
public bool Available { get; set; }
public DateTime? CreatedDate { get; set; }
public DateTime? LastLogin { get; set; }
public DateTime? DeletedDate { get; set; }
public DateTime? DeletedBy { get; set; }
public ICollection<Service> Services { get; set; }
public ICollection<Category> Categories { get; set; }
public ICollection<Subcategory> Subcategories { get; set; }
}
提前致谢。
I'm trying to create a many-to-many relationship using EF code first in my MVC project. I have a scenario where I have a Service which can have many Categories which may have many subcategories. This bit seems to be working fine.
Each Service, Category and Subcategory can also have many HelpDeskMembers associated with it. This is where I'm having trouble creating the association. With the classes below I was expecting EF to create Service_HelpDeskMembers, Category_HelpDeskMembers and Subcategory_HelpDeskMembers tables. Please can somebody guide me in the right direction?
P.S. In the navigation properties, I am not using virtual because I am using AJAX and JSON to create cascading drop down lists between Service/Category/Subcategory and by using 'virtual', I was getting a circular reference error.
Here are my classes.
public class Service
{
[Key]
public int ServiceID { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public HelpDeskMember CreatedBy { get; set; }
public DateTime? DeletedDate { get; set; }
public HelpDeskMember DeletedBy { get; set; }
public ICollection<Category> Categories { get; set; }
public ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}
public class Category
{
[Key]
public int CategoryID { get; set; }
[ForeignKey("Service")]
public int ServiceID { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public HelpDeskMember CreatedBy { get; set; }
public DateTime? DeletedDate { get; set; }
public HelpDeskMember DeletedBy { get; set; }
public Service Service { get; set; }
public ICollection<Subcategory> Subcategories { get; set; }
public ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}
public class Subcategory
{
[Key]
public int SubcategoryID { get; set; }
[ForeignKey("Category")]
public int CategoryID { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public HelpDeskMember CreatedBy { get; set; }
public DateTime? DeletedDate { get; set; }
public HelpDeskMember DeletedBy { get; set; }
public Category Category { get; set; }
public ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}
public class HelpDeskMember
{
public int HelpDeskMemberID { get; set; }
public string Name { get; set; }
public bool Admin { get; set; }
public bool Available { get; set; }
public DateTime? CreatedDate { get; set; }
public DateTime? LastLogin { get; set; }
public DateTime? DeletedDate { get; set; }
public DateTime? DeletedBy { get; set; }
public ICollection<Service> Services { get; set; }
public ICollection<Category> Categories { get; set; }
public ICollection<Subcategory> Subcategories { get; set; }
}
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里的技巧是使用模型构建器创建多对多链接,然后它将在数据库中按照您期望的方式运行(带有链接表)
请查看这篇文章,了解有关如何执行多对多的详细信息< a href="http://blogs.microsoft.co.il/blogs/gilf/archive/2011/08/01/creating-a-many-to-many-mapping-using-code-first.aspx" rel="nofollow">http://blogs.microsoft.co.il/blogs/gilf/archive/2011/08/01/creating-a-many-to-many-mapping-using-code-first.aspx< /a>
The trick here is to use the model builder to create the many to many link, then it will function as you expect in the db (with a link table)
Take a look at this article for details on how to do a many to many http://blogs.microsoft.co.il/blogs/gilf/archive/2011/08/01/creating-a-many-to-many-mapping-using-code-first.aspx