将efCore从2.2更新到3.1时拥有的实体



我正在将一个基于DDD设计原则的现有项目从efcore 2.2迁移到efcore 3.1。数据库的设置是基于Julie Lerman几年前写的一系列文章。

总的来说,这很好,但我很难解决与所属实体的问题,特别是这个错误消息:

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")行引发。

就是这样。然而,这会产生零差异,同样的错误再次出现。

我无法运行添加迁移来测试在抛出异常时是否还有其他设置,并且我不确定如果我删除ContextModelSnapshot…会发生什么

感谢@IvanStoev,请参阅他在评论中链接的问题。

配置是正确的,我的问题发生在试图删除阴影属性时

// Remove shadow property for entities which are not owned
foreach (var entityType in builder.Model.GetEntityTypes().Where(e => !e.IsOwned()))
{
builder.Entity(entityType.Name).Ignore("IsDirty");
}

最新更新