C# 如何使用代码优先方法创建多对多关系?

C# 如何使用代码优先方法创建多对多关系?,c#,asp.net-mvc-4,ef-code-first,entity-framework-5,C#,Asp.net Mvc 4,Ef Code First,Entity Framework 5,我试图在爬行动物模型和标记模型之间建立一个基本的可选多对多关系,这样爬行动物可以有标记,标记可以提供爬行动物列表 我试过从我读到的其他问题中进行一些设置,但我似乎无法使这种关系起作用。这是我的当前设置: 爬行动物模型: public class Reptile { public int ReptileId { get; set; } [Required] [StringLength(100)] public string Title { get; set; }

我试图在爬行动物模型和标记模型之间建立一个基本的可选多对多关系,这样爬行动物可以有标记,标记可以提供爬行动物列表

我试过从我读到的其他问题中进行一些设置,但我似乎无法使这种关系起作用。这是我的当前设置:

爬行动物模型:

public class Reptile
{
    public int ReptileId { get; set; }

    [Required]
    [StringLength(100)]
    public string Title { get; set; }

    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    //...

    public ICollection<Tag> Tags { get; set; }
}
公共类爬行动物
{
公共ID{get;set;}
[必需]
[长度(100)]
公共字符串标题{get;set;}
[数据类型(DataType.multilitext)]
公共字符串说明{get;set;}
//...
公共ICollection标记{get;set;}
}
标签型号:

public class Tag
{
public int TagId { get; set; }

[Required]
[StringLength(30)]
public string Title { get; set; }

[Required]
[DataType(DataType.MultilineText)]
public string Description { get; set; }

//...

public ICollection<Reptile> Reptiles { get; set; }
}
公共类标记
{
public int TagId{get;set;}
[必需]
[行政长官(30)]
公共字符串标题{get;set;}
[必需]
[数据类型(DataType.multilitext)]
公共字符串说明{get;set;}
//...
公共ICollection爬行动物{get;set;}
}
数据库上下文:

public class ReptizonDBContext : DbContext
{
    public DbSet<UserProfile> UserProfiles { get; set; }

    public DbSet<Tag> Tags { get; set; }

    public DbSet<Reptile> Reptiles { get; set; }

    public ReptizonDBContext()
        : base("ReptilesDBContext")
    {
    }

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Reptile>().HasMany(r => r.Tags).WithMany(t => t.Reptiles);

       base.OnModelCreating(modelBuilder);
   }
}
公共类reptisondbcontext:DbContext
{
公共数据库集用户配置文件{get;set;}
公共DbSet标记{get;set;}
公共数据库集爬行动物{get;set;}
公共reptisondbcontext()
:base(“爬行动物数据库上下文”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity();
基于模型创建(modelBuilder);
}
}
但是,我在尝试运行站点时遇到以下错误:

中发生类型为“System.Data.SqlClient.SqlException”的异常 EntityFramework.dll,但未在用户代码中处理

其他信息:可能会在表“爬虫类”上引入外键约束“FK_dbo.gradietags_dbo.Tags_Tag_TagId” 导致循环或多个级联路径。指定在删除时不执行任何操作或 更新时不执行任何操作,或修改其他外键约束

无法创建约束。请参阅前面的错误


我应该如何创建这种多对多关系?

在ModelCreating上添加

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
.WillCascadeOnDelete(false);