Я сталкиваюсь со следующей проблемой в ядре платформы сущностей.
Введение ограничения 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, я не уверен, где я должен это сделать.
Ваша помощь в этом будет высоко оценена.
Спасибо.