Я переношу существующий проект, основанный на DDD принципах разработки, с efcore 2.2 на efcore 3.1. Настройка базы данных основана на серии статей, которые июль ie Лерман написал несколько лет за go.
Как правило, это было хорошо, но я изо всех сил пытаюсь разрешить проблему с собственными юридическими лицами и, в частности, это сообщение об ошибке:
InvalidOperationException: The type 'ApplicationCore.Entities.UserAggregate.Email' cannot be configured as non-owned because an owned entity type with the same name already exists
Два объекта:
public class User
{
public int Id { get; private set; }
public Guid GuidId { get; private set; }
public Email Email {get; private set;}
}
и это «принадлежащий» объект
public class Email
{
public string Address { get; private set; }
}
Ранее в EfCore 2.2 конфигурация была:
private static void ConfigureUser(EntityTypeBuilder<User> builder)
{
builder.HasKey(s => s.Id);
builder.Property(s => s.GuidId)
.IsRequired();
builder.OwnsOne(u => u.Email);
}
Насколько я понимаю, что я должен делать в efcore3.1, это обновить это так:
private static void ConfigureUser(EntityTypeBuilder<User> builder)
{
builder.HasKey(s => s.Id);
builder.Property(s => s.GuidId)
.IsRequired();
builder.OwnsOne(u => u.Email).WithOwner();
}
Помимо этого метода настройки, есть еще несколько для другие сущности в методе OnModelCreating()
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<ForecastSetup>(ConfigureForecastSetup);
…
builder.Entity<User>(ConfigureUser);
// Remove internal property
foreach (var entityType in builder.Model.GetEntityTypes())
{
builder.Entity(entityType.Name).Ignore("IsDirty");
}
}
Исключение будет выдано из строки builder.Entity(entityType.Name).Ignore("IsDirty")
.
И это все. Тем не менее, это делает ноль разницы, и та же ошибка появляется снова.
Я не могу запустить add-migrations, чтобы проверить, если что-то еще настраивается, поскольку генерируется исключение, и я не уверен, что будет произойдет, если я удалю ContextModelSnapshot…