1

我正在尝试在 Reptile 模型和 Tag 模型之间设置基本的可选多对多关系,以便爬行动物可以有标签,而标签可以提供爬行动物的列表。

我已经从我读过的其他问题中尝试了一些设置,但我似乎无法让这种关系发挥作用。这是我目前的设置:

爬行动物模型:

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; }
}

标签型号:

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 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);
   }
}

但是,在尝试运行该站点时出现以下错误:

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

附加信息:在表 'ReptileTags' 上引入 FOREIGN KEY 约束 'FK_dbo.ReptileTags_dbo.Tags_Tag_TagId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

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

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

4

1 回答 1

3

添加OnModelCreating

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

注意:此删除所有关系的 CASCADE DELETES

或使用

.WillCascadeOnDelete(false);
于 2013-11-07T19:04:14.340 回答