将值对象添加到 EF 实体 - 实体类型无法配置为拥有,因为它已被配置为非拥有
Adding Value Object to EF Entity - The entity type cannot be configured as owned because it has already been configured as a non-owned
我们收到以下错误,似乎只有在将日期时间添加到值对象时才会发生。 '实体类型 'TimeWindow' 无法配置为拥有,因为它已被配置为非拥有。如果您想覆盖以前的配置,请先通过调用 'Ignore'.
从模型中删除实体类型
值对象class:
public class TimeWindow : ValueObject
{
public DateTime? StartTime { get; set; }
public DateTime? EndTime { get; set; }
private TimeWindow()
{
}
public TimeWindow(
DateTime? startTime,
DateTime? endTime)
{
StartTime = startTime;
EndTime = endTime;
}
protected override IEnumerable<object> GetAtomicValues()
{
yield return StartTime;
yield return EndTime;
}
}
我们在 OnModelCreating 内部添加了一个 OwnsOne 关系:
builder.Entity<Manifest>(b =>
{
b.ToTable(DistributionConsts.DbTablePrefix + "Manifests", DistributionConsts.DbSchema);
b.ConfigureByConvention();
b.OwnsOne(b => b.TimeWindow);
});
我们要将 TimeWindow 值对象添加到的实体:
public class Manifest : FullAuditedAggregateRoot<Guid>
{
protected Manifest()
{
}
public Manifest(
Guid id) : base(id)
{
}
public virtual TimeWindow TimeWindow { get; set; }
}
我们有另一个实体,它具有以相同方式配置的不同 ValueObject,但没有任何 DateTimes,并且我们没有收到任何错误。
在构建器之前和构建器内部添加 .Ignore(x => x.TimeWindow);
仍然会出错(如错误所提示)。
builder.Ignore<TimeWindow>();
builder.Entity<Manifest>(b =>
{
b.ToTable(DistributionConsts.DbTablePrefix + "Manifests", DistributionConsts.DbSchema);
b.ConfigureByConvention();
b.OwnsOne(b => b.TimeWindow);
});
添加 builder.Ignore<TimeWindow>();
行将从模型中删除实体类型并允许我覆盖它并将其配置为 OwnsOne
我们收到以下错误,似乎只有在将日期时间添加到值对象时才会发生。 '实体类型 'TimeWindow' 无法配置为拥有,因为它已被配置为非拥有。如果您想覆盖以前的配置,请先通过调用 'Ignore'.
从模型中删除实体类型值对象class:
public class TimeWindow : ValueObject
{
public DateTime? StartTime { get; set; }
public DateTime? EndTime { get; set; }
private TimeWindow()
{
}
public TimeWindow(
DateTime? startTime,
DateTime? endTime)
{
StartTime = startTime;
EndTime = endTime;
}
protected override IEnumerable<object> GetAtomicValues()
{
yield return StartTime;
yield return EndTime;
}
}
我们在 OnModelCreating 内部添加了一个 OwnsOne 关系:
builder.Entity<Manifest>(b =>
{
b.ToTable(DistributionConsts.DbTablePrefix + "Manifests", DistributionConsts.DbSchema);
b.ConfigureByConvention();
b.OwnsOne(b => b.TimeWindow);
});
我们要将 TimeWindow 值对象添加到的实体:
public class Manifest : FullAuditedAggregateRoot<Guid>
{
protected Manifest()
{
}
public Manifest(
Guid id) : base(id)
{
}
public virtual TimeWindow TimeWindow { get; set; }
}
我们有另一个实体,它具有以相同方式配置的不同 ValueObject,但没有任何 DateTimes,并且我们没有收到任何错误。
在构建器之前和构建器内部添加 .Ignore(x => x.TimeWindow);
仍然会出错(如错误所提示)。
builder.Ignore<TimeWindow>();
builder.Entity<Manifest>(b =>
{
b.ToTable(DistributionConsts.DbTablePrefix + "Manifests", DistributionConsts.DbSchema);
b.ConfigureByConvention();
b.OwnsOne(b => b.TimeWindow);
});
添加 builder.Ignore<TimeWindow>();
行将从模型中删除实体类型并允许我覆盖它并将其配置为 OwnsOne