我们正在使用Fluent NH和基于约定的映射。我有以下内容:
public class Foo() : Entity
{
public BarComponent PrimaryBar { get; set; }
public BarComponent SecondaryBar { get; set; }
}
public class BarComponent
{
public string Name { get; set; }
}
我知道它将使用单个名称字段创建foo表。我尝试了以下Override,它不起作用。
public class FooOverride : IAutoMappingOverride<Foo>
{
public void Override(AutoMapping<Foo> mapping)
{
mapping.Component(x => x.PrimaryBar).ColumnPrefix("primary");
mapping.Component(x => x.SecondaryBar).ColumnPrefix("secondary");
}
}
我是否真的需要进行完全覆盖映射,或者我可以在这里以某种方式工作?
答案 0 :(得分:0)
当时向我建议的方法,我已成功使用(但实体,而不是组件)是创建空的中间实体,并在后代类中引用它们。
在您的情况下,您可以创建两个从BarComponent继承的新的空类(例如,PrimaryBarComponent和SecondaryBarComponent)。
然后,在你的Foo类中,将它们声明为:
public PrimaryBarComponent PrimaryBar { get; set; }
public SecondaryBarComponent SecondaryBar { get; set; }
在我看来,这是一个kluge,但它适用于实体和实体列表,并且不需要任何覆盖或约定。
我从未使用过FNH的组件,所以我不知道类似的方法是否有效,但可能值得研究。
答案 1 :(得分:0)
我最终得到了我在问题中描述的方式。事实证明,我们的AutoMappingConfiguration存在问题,它继承自DefaultAutomappingConfiguration。我们没有正确识别组件。