基于拉吉斯拉夫出色的答案,这里是如何做到这一点,而无需使用任何映射 - 只是属性应用到模型类本身:
public class Group
{
public int Id { get; set; }
[MaxLength(300)]
public string Name { get; set; }
public ICollection<User> Users { get; set; }
}
public class User
{
public int Id { get; set; }
[MaxLength(300)]
public string Name { get; set; }
[ForeignKey("PrimaryGroup")]
public int PrimaryGroupId { get; set; }
[Required]
public Group PrimaryGroup { get; set; }
[InverseProperty("Users")]
public ICollection<Group> SecondaryGroups { get; set; }
}
注意事项
如果需要,可以将虚拟关键字添加到2 ICollection
和Group
。这allows lazy-loading。在性能方面,我不推荐它,但它是可能的。
我包含的MaxLength
属性的任意(但安全)长度为300
,因为在没有MaxLength的情况下将字符串放在EF中可以获得低性能的NVarChar(MAX)
列。完全不相关的问题,但更好地发布好的代码。
我建议您的EF类的类名称为“User”和“Group”。他们会让你以后尝试运行的任何SQL复杂化,必须键入[User]和[Group]才能访问它们,并且在类别User
将与Context
属性User
冲突的MVC控制器中使用这些类会变得复杂访问Asp.Net Identity库。
我可以说拉迪斯拉夫,这是我曾经有幸遇到过/用来解决我确切问题的最有用的帖子之一!谢谢! – LiverpoolsNumber9 2011-11-03 16:48:09
Lad是实体框架的人,非常感谢拥有如此丰富的资源。还有一个原因是这个栈太棒了! – Sam 2012-08-12 17:46:33