基于 Ladislav 的出色回答,以下是在不使用任何映射的情况下如何做到这一点 - 只是应用于模型类本身的属性:
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; }
}
笔记
如果需要,可以将 virtual 关键字添加到 2ICollection
和Group
. 这允许延迟加载。性能方面,我不推荐它,但它是可能的。
我包含MaxLength
了具有任意(但安全)长度的属性300
,因为在没有 MaxLength 的情况下将字符串放在 EF 中会使您的NVarChar(MAX)
列性能低下。与所要求的内容完全无关,但最好发布好的代码。
我建议不要为您的 EF 类命名“用户”和“组”。它们将使您稍后尝试运行的任何 SQL 复杂化,必须键入 [User] 和 [Group] 才能访问它们,并且在 MVC 控制器中使用这些类会变得复杂,因为您的类User
将与允许您访问的Context
属性发生冲突User
Asp.Net 身份库。