为了简洁起见,我将把所有内容都精简一下。我有两个模型,它们将具有多对多关系。模型是用户和域。在这种情况下,域是一个大公司的某个领域,比如母公司,它的姐妹公司,也许还有一些小公司都在同一个伞下。这是 User.cs 模型
public class User
{
public User()
{
Domains = new HashSet<Domain>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Domain> Domains { get; set; }
}
这是 Domain.cs 模型:
public class Domain
{
public Domain()
{
Users = new HashSet<User>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int DomainId { get; set; }
public string DomainName { get; set; }
public ICollection<User> Users { get; set; }
}
然后我在我的 Context.cs 中做这个神奇的魔法
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(c => c.Domains)
.WithMany(p => p.Users)
.Map(
m =>
{
m.MapLeftKey("DomainId");
m.MapRightKey("UserId");
m.ToTable("DomainUsers");
});
base.OnModelCreating(modelBuilder);
}
这可以很好地创建 DomainUsers 表。使用 DomainID 和 UserID 制作两列表。
在我的种子数据中,我有一个用户(UserId = 1)和三个域(ID = 1、2、3)。在查找表上,我可以添加一条记录:
UserID | DomainId
1 | 1
但是,如果我尝试添加另一个:
UserID | DomainId
1 | 1
1 | 2
我收到以下错误:
The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_dbo.DomainUsers_dbo.Users_DomainId". Conflict occured in database "MyDatabase"
table "dbo.Users", column "UserId"
我在这里错过了一些基本的数据库设计概念,还是与实体框架有其他关系?