我有一个汇总根(产品),除其他外,还有一个价值对象(ProductIdentifiers)列表。为了将值对象列表存储在单独的数据库表中,我使用EF Core 2.2的OwnsMany()
方法。不同的AR(设备)还具有值对象(设备标识符)列表。在DeviceIdentifier的模型中,我想指向ProductIdentifier来弄清楚它是什么类型的标识符。当我将其合并到模型中时,添加迁移时出现错误:Unable to determine the relationship represented by navigation property 'DeviceIdentifier.ProductIdentifier' of type 'ProductIdentifier'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.
似乎迁移管理器不知道我想要的属性ProductIdentifier
是什么。因此,我决定使用Fluent API来明确说明DeviceIdentifier
“具有一个” ProductIdentifier(或至少使用它)。因此,我添加了行deviceIdentifier.HasOne(d => d.ProductIdentifier);
。但是,当我尝试运行迁移管理器时,出现以下错误:The relationship from 'DeviceIdentifier.ProductIdentifier' to 'ProductIdentifier' is not supported because the owned entity type 'ProductIdentifier' cannot be on the principal side of a non-ownership relationship.
这是为什么?如果另一个模型是由实体/集合根拥有的,是否不可能从一个模型的属性指向另一个模型的属性?
Here you can see an image of what I am trying to accomplish。我无法创建红线!
答案 0 :(得分:0)
我不了解您的问题是什么,但是在您的上下文中,覆盖OnModelCreating
,然后您就可以编写实体之间的关系了。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<X>().HasOne(x => x.Y);
modelBuilder.Entity<Z>().HasMany(x => x.X).WithOne(y=>y.Z);
}
答案 1 :(得分:0)
您是在说嵌套的拥有类型吗?
如果是,请检查文档Nested owned types。对于实体基本上相同,但是您可以使用OwnsOne
来设置拥有的类型之间的关系。
HasOne
用于实体,与HasMany
相反。对于拥有的实体,分别为OwnsOne
和OwnsMany
。