我试图弄清楚我在做什么,以使Update-Database命令告诉我以下内容:
引入FOREIGN KEY约束
'FK_ProjectOwnerProduct_ProjectProduct_ProjectId_ProductId'在表上 “ ProjectOwnerProduct”可能会导致循环或多个级联路径。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他 外键约束。
和
警告!聚集索引的最大密钥长度为900字节。 索引“ PK_ProjectOwnerProduct”的最大长度为908个字节。 对于大值的某些组合,插入/更新操作将 失败。
我具有以下实体结构:
3个顶级实体:
项目(PK:ProjectId)
所有者(PK:OwnerId)
产品(PK:ProductId)
多对多联接表
ProjectOwner(PK:ProjectId,PK:OwnerId)
ProjectProduct(PK:ProjectId,PK:ProductId)
处理项目中所有者与产品之间的关系:
ProjectOwnerProduct(PK:ProjectId,PK:OwnerId,PK:ProductId)
以下是我的流利的API声明:
// ** KEY SPECIFICATIONS **
modelBuilder.Entity<ProjectOwner>()
.HasKey(x => new { x.ProjectId, x.OwnerId});
modelBuilder.Entity<ProjectProduct>()
.HasKey(x => new { x.ProjectId, x.ProductId});
modelBuilder.Entity<ProjectOwnerProduct>()
.HasKey(x => new { x.ProjectId, x.OwnerId, x.ProductId});
// Project Owner
modelBuilder.Entity<ProjectOwner>()
.HasOne(x => x.Project)
.WithMany(x => x.ProjectOwners)
.HasForeignKey(x => x.ProjectId);
modelBuilder.Entity<ProjectOwner>()
.HasOne(x => x.Owner)
.WithMany(x => x.ProjectOwners)
.HasForeignKey(x => x.OwnerId);
// Project Product
modelBuilder.Entity<ProjectProduct>()
.HasOne(x => x.Project)
.WithMany(x => x.ProjectProducts)
.HasForeignKey(x => x.ProjectId);
modelBuilder.Entity<ProjectProduct>()
.HasOne(x => x.Product)
.WithMany()
.HasForeignKey(x => x.ProductId);
// Project Owner Product
modelBuilder.Entity<ProjectOwnerProduct>()
.HasOne(x => x.Project)
.WithMany(x => x.ProjectOwnerProducts)
.HasForeignKey(x => x.ProductId);
modelBuilder.Entity<ProjectOwnerProduct>()
.HasOne(x => x.Owner)
.WithMany(x => x.ProjectOwnerProducts)
.HasForeignKey(x => x.OwnerId);
modelBuilder.Entity<ProjectOwnerProduct>()
.HasOne(x => x.Product)
.WithMany()
.HasForeignKey(x => x.ProductId);
如果一个项目被删除,我希望它的所有ProjectOwners和ProjectProducts都被删除。此外,其所有ProjectOwnerProducts。
如果一个ProjectOwner被删除,我希望所有包含那个ProjectId,OwnerId组合的ProjectOwnerProducts都被删除。
如果一个ProjectProduct被删除,我希望所有包含那个ProjectId,ProductId组合的ProjectOwnerProducts都被删除。
我不明白为什么会抱怨...