Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY - PullRequest
0 голосов
/ 20 марта 2020

Я сталкиваюсь со следующей проблемой в ядре платформы сущностей.

Введение ограничения FOREIGN KEY 'FK_MasterCountries_MasterLanguages_LanguageId' для таблицы 'MasterCountries' может привести к циклам или нескольким каскадным путям. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. Не удалось создать ограничение или индекс. См. Предыдущие ошибки.

У меня есть три следующих объекта:

1. MasterCountry

public class MasterCountry
{
    public long Id { get; set; }
    public string Name { get; set; }
    public long CurrencyId { get; set; }
    public int LanguageId { get; set; }
    public bool IsActive { get; set; }

    // Navigation Properties
    public MasterCurrency MasterCurrency { get; set; }
    public MasterLanguage MasterLanguage { get; set; }
}

2. MasterCurrency

public class MasterCurrency
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }

    // Navigation Property
    public MasterCountry MasterCountry { get; set; }
}

3. MasterLanguage

public class MasterLanguage
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }

    // Navigation Property
    public ICollection<MasterCountry> MasterCountries { get; set; }
}

Класс DbContext выглядит следующим образом:

public partial class NewProjectDbContext : DbContext
{
    public DbSet<MasterLanguage> MasterLanguages { get; set; }
    public DbSet<MasterCurrency> MasterCurrencies { get; set; }
    public DbSet<MasterCountry> MasterCountries { get; set; }

    public YouTemaDbContext(DbContextOptions<YouTemaDbContext> options)
        : base(options)
    { }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder
            .ApplyConfiguration(new MasterCurrencyConfiguration());

        builder
            .ApplyConfiguration(new MasterLanguageConfiguration());

        builder
            .ApplyConfiguration(new MasterCountryConfiguration());
    }
}

Классы конфигурации выглядят следующим образом:

1. MasterCountryConfiguration

public class MasterCountryConfiguration : IEntityTypeConfiguration<MasterCountry>
{
    public void Configure(EntityTypeBuilder<MasterCountry> builder)
    {
        builder.HasKey(m => m.Id);

        builder.Property(m => m.Id).UseIdentityColumn();

        builder.Property(m => m.Name).IsRequired().HasMaxLength(250).IsUnicode();

        builder.Property(m => m.IsActive).IsRequired().HasDefaultValue(0);

        builder.Property(m => m.LanguageId).IsRequired();

        builder.Property(m => m.CurrencyId).IsRequired();

        builder
            .HasOne(m => m.MasterLanguage)
            .WithMany(a => a.MasterCountries)
            .HasForeignKey(m => m.LanguageId);

        builder
            .HasOne(m => m.MasterCurrency)
            .WithOne(a => a.MasterCountry)
            .HasForeignKey<MasterCountry>(m => m.CurrencyId);

        builder.ToTable("MasterCountries");
    }
}

2. MasterCurrencyConfiguration

public class MasterCurrencyConfiguration : IEntityTypeConfiguration<MasterCurrency>
{
    public void Configure(EntityTypeBuilder<MasterCurrency> builder)
    {
        builder.HasKey(m => m.Id);

        builder.Property(m => m.Id).UseIdentityColumn();

        builder.Property(m => m.Name).IsRequired().HasMaxLength(250).IsUnicode();

        builder.Property(m => m.IsActive).IsRequired().HasDefaultValue(0);

        builder.ToTable("MasterCurrencies");
    }
}

3. MasterLanguageConfiguration

public void Configure(EntityTypeBuilder<MasterLanguage> builder)
    {
        builder.HasKey(m => m.Id);

        builder.Property(m => m.Id).UseIdentityColumn();

        builder.Property(m => m.Name).IsRequired().HasMaxLength(250).IsUnicode();

        builder.Property(m => m.IsActive).IsRequired().HasDefaultValue(0);

        builder.ToTable("MasterLanguages");
    }
}

Но при запуске файла миграции я получаю следующую проблему для сущностей MasterCurrency и MasterLanguage.

CONSTRAINT [FK_MasterCountries_MasterCurrencies_CurrencyId] FOREIGN KEY] [CurrencyI ) ССЫЛКИ [MasterCurrencies] ([Id]) НА УДАЛИТЬ КАСКАД

CONSTRAINT [FK_MasterCountries_MasterLanguages_LanguageId] КЛЮЧЕВОЙ КЛЮЧ ([LanguageId]) Ссылки * Я знаю, что должен установить Cascade delete на No Action , но так как я новичок в ядре Entity Framework, я не уверен, где я должен это сделать.

Ваша помощь в этом будет высоко оценена.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...