我正在尝试使用我的.NET Core 1.1 MVC应用程序中的Entity Framework构建相关项类型模型 . 我一直遇到以下错误(尝试了deletebehaviours与外键的所有组合):
在表'MenuItemRelation'上引入FOREIGN KEY约束'FK_MenuItemRelation_MenuItems_RelatedMenuItemId'可能会导致循环或多个级联路径 . 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束 . 无法创建约束或索引 . 查看以前的错误 .
在我去之前简单地使用映射表之前,我想听听社群对此的意见 .
模型构建器
//MenuItem <> MenuItem many to many (related item) mapping
modelBuilder.Entity<MenuItemRelation>()
.HasKey(mr => new { mr.PrimaryMenuItemId, mr.RelatedMenuItemId });
modelBuilder.Entity<MenuItemRelation>()
.HasOne(mr => mr.PrimaryMenuItem)
.WithMany()
.HasForeignKey(mr => mr.PrimaryMenuItemId);
modelBuilder.Entity<MenuItemRelation>()
.HasOne(mr => mr.RelatedMenuItem)
.WithMany()
.HasForeignKey(mr => mr.RelatedMenuItemId).OnDelete(DeleteBehavior.Restrict);
域模型
public class MenuItem
{
public string Category { get; set; }
public string Description { get; set; }
public long ID { get; set; }
public Menu Menu { get; set; }
public string Name { get; set; }
public string PictureUrls { get; set; }
public float Price { get; set; }
public string Reference { get; set; }
public ICollection<MenuItemRelation> RelatedItems { get; set; }
public string Status { get; set; }
}
映射实体
public class MenuItemRelation
{
public MenuItem PrimaryMenuItem { get; set; }
public long PrimaryMenuItemId { get; set; }
public MenuItem RelatedMenuItem { get; set; }
public long RelatedMenuItemId { get; set; }
}
1 回答
因此,我使用数据库第一种方法对所需的SQL结果建模并反向设计多对多关系,如此处所述Entity Framework Core creating model from existing database . 结果如下 . 基本上它只需要我在menuitem类上添加传入关系和传出关系 .
如果有更好的方法,请随意发表评论 .
表TSQL
域模型(带有一些命名编辑)
映射对象
模型构建器