не может быть настроен как не принадлежащий, поскольку принадлежащий тип сущности с тем же именем уже существует

#c# #.net #entity-framework-core

#c# #.net #entity-framework-core

Вопрос:

У меня есть одно имя объекта business, которое используется двумя разными ролями UserBusinessRole, BusinessInterest.Я хочу добавить внешний ключ для бизнес-объекта в UserBusinessRole, который не связан с BusinessInterest, а с бизнесом, который принадлежит BusinessInterest, поэтому я не могу установить внешний ключ в UserBusinessRole. получение системы ошибок.Исключение InvalidOperationException: «Тип ‘Business’ не может быть настроен как не принадлежащий, поскольку принадлежащий тип сущности с тем же именем уже существует».

 internal class BusinessInterestEntityConfiguration: IEntityTypeConfiguration <BusinessInterest> {
  public void Configure(EntityTypeBuilder < BusinessInterest > builder) {
    builder.OwnsOne(x =>x.Business, sa =>{
      sa.Property(x =>x.FundsWarningLevel).HasColumnType(SqlDbType.Money.ToString());

      sa.HasOne(x =>x.CDF).WithMany().HasForeignKey(x=>x.CDFId).IsRequired().OnDelete(DeleteBehavior.Restrict);
    });
  }
}

internal class UserBusinessRoleEntityConfiguration: IEntityTypeConfiguration <UserBusinessRole> {
  public void Configure(EntityTypeBuilder<UserBusinessRole> builder) {
      builder.HasOne(x =>x.Business).WithMany().HasForeignKey(x =>x.BusinessId).IsRequired();
  }
}
 

Комментарии:

1. Размещенный код должен выполняться только один раз. Существует файл сопоставления (EDMX), который сопоставляет таблицы / поля базы данных с классами c #. Приведенный выше код изменяет EDMX. Поэтому, как только ключ добавлен, вы не можете добавить его во второй раз.

2. на самом деле его внутри в OnModelCreating(ModelBuilder ModelBuilder) с использованием ModelBuilder . ApplyConfiguration(new BusinessInterestEntityConfiguration());

3. Таким образом, вы создаете модель только один раз. Что произойдет, если вы захотите изменить существующую модель. Вы запускаете весь код или только то, что нужно обновить? Запуск метода Create, когда объект уже создан, добавит дубликаты и выдаст исключения.

4. спасибо за ответ. Можете ли вы помочь мне с тем, как предоставить внешний ключ объекту, который принадлежит другому объекту? в верхнем примере я хочу предоставить внешний ключ бизнес-объекту, который принадлежит бизнес-интересам. Или задать имя свойства без собственного объекта?

5. я был владельцем объекта для замены этой строки entity framework builder. Свойство(x => x.Воскресные часы. isClosed). HasColumnName(«IsClosedSunday»); есть ли какой-либо другой способ добиться того же?