实体框架代码首先进行单独的配置:错误可能会导致循环

时间:2018-12-04 08:14:46

标签: c# configuration entity-framework-6

我有一个单独的实体框架配置类,例如

    namespace CNC.Infrastructure.EntityConfiguration
    {
        public class OutletConfiguration : IEntityTypeConfiguration<Employee>
        {
            public void Configure(EntityTypeBuilder<Employee> builder)
            {
builder.Property(e => e.Name)
                .IsRequired()
                .HasMaxLength(50)
                .IsUnicode(false);

            builder.Property(e => e.ProfileImage)
                .IsRequired()
                .HasMaxLength(200)
                .IsUnicode(false);

             builder.HasMany(e => e.Projects)
             .WithOne(e => e.Employee)
             .IsRequired()
             .OnDelete(DeleteBehavior.Restrict);
            }
        }
    }

我们正在使用软删除,因此我们仅在每个表上更新到{true / false}被删除

我使用的方式如下

builder.HasMany(e => e.Projects)
             .WithOne(e => e.Employee)
             .IsRequired()
             .OnDelete(DeleteBehavior.Restrict);

对于关系,但不能使用

.WillCascadeOnDelete(false);

像l如果具有单独的配置,则无法使用此格式

modelBuilder.Entity<Project>()
        .HasRequired<User>(s => s.User)
        .WithMany()
        .WillCascadeOnDelete(false);

却遇到此错误

  

在表“ **”上引入FOREIGN KEY约束“ *表名* ”   可能会导致循环或多个级联路径。指定ON DELETE NO   ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY   约束。无法创建约束或索引。见前   错误。

我不希望像公司一样更改数据库。我该怎么解决

编辑: 我也尝试过这个link 配置的方式是通过构造器传递builder属性。 l在问这个问题之前先搜索答案:差异很小,但无法按预期工作,因为l说我无法访问

 .WillCascadeOnDelete(false);

就像将配置作为

传递给DbContext一样
 protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.Entity<Employee>(new EmployeeConfiguration().Configure);
}

0 个答案:

没有答案