我在域模型中有一个实体CustomProperty
,它可以从其他几个实体中使用。
Product
{
int Id;
Collection<CustomProperty> CustomProperties;
}
和
Order
{
int Id;
Collection<CustomProperty> CustomProperties;
}
但是在DB中,我不希望只有一个表CustomProperty
包含Product
表的可空外键和Order
的另一个可空外键。相反,我需要两个单独的表ProductCustomProperty
和OrderCustomProperty
。
我需要使用自动化和约定来做到这一点。有没有人有任何想法?
是的,我有一个对我不起作用的想法。也许任何人都有线索原因: public class CustomPropertyConvention : IHasManyConvention, IHasManyConventionAcceptance
{
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Table("ProductCustomProperty");
}
public void Accept(IAcceptanceCriteria<IOneToManyCollectionInspector> criteria)
{
criteria.Expect(i => i.Relationship.Class.Name == "CustomProperty" && i.Relationship.EntityType == typeof(Product));
}
}
此示例必须完美运行,但IOneToManyCollectionInstance.Table()不会设置任何内容。
答案 0 :(得分:0)
one-to-many
关系会忽略该表,因为FK列位于多方实体中。
换句话说,你不能将一个CustomProperty实体映射到两个不同的表(它没有意义)。
您可以使用many-to-many
映射,也可以将CustomProperty映射为复合类型而不是实体。