我们遇到了以下错误,只有在值对象添加了日期时间时才会发生。'实体类型“TimeWindow”无法配置为所拥有的,因为它已经被配置为非所拥有的。如果您想要覆盖先前的配置,请通过调用“Ignore”从模型中删除实体类型。
值对象类:
在 OnModelCreating 方法中,我们添加了一个 OwnsOne 关系:
我们要将TimeWindow值对象添加到的实体是:
我们有另一个实体,配置了不同的ValueObject,但没有任何DateTimes,我们没有收到任何错误。 在构建器之前和构建器内添加
值对象类:
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);
仍然会出现错误(如错误所建议的)。
TimeWindow
类注册为实体类型(请参阅 EF Core 文档中的包括类型在模型中)。这个操作发生在b.OwnsOne(b => b.TimeWindow);
调用之前。找到并消除/修复该位置即可。这就是我所能说的。 - Ivan Stoev