Fluent nhibernate Fluent NHibernate自动映射类约定是';t应用于整个类层次结构
我正在尝试用Fluent Nhibernate自动映射一个简单的继承层次结构,并且我需要为每个表使用与其类稍有不同的名称(下划线而不是Pascal大小写)。这似乎是一个使用约定的明显地方。我还想使用每个子类的表策略,但这种组合似乎给我带来了一个问题:约定只应用于层次结构的基类 这是我的自动映射:Fluent nhibernate Fluent NHibernate自动映射类约定是';t应用于整个类层次结构,fluent-nhibernate,automapping,convention-over-configur,table-per-subclass,Fluent Nhibernate,Automapping,Convention Over Configur,Table Per Subclass,我正在尝试用Fluent Nhibernate自动映射一个简单的继承层次结构,并且我需要为每个表使用与其类稍有不同的名称(下划线而不是Pascal大小写)。这似乎是一个使用约定的明显地方。我还想使用每个子类的表策略,但这种组合似乎给我带来了一个问题:约定只应用于层次结构的基类 这是我的自动映射: AutoMap .AssemblyOf<BaseRule>() .IncludeBase<BaseRule>() // "BaseRule" is an abst
AutoMap
.AssemblyOf<BaseRule>()
.IncludeBase<BaseRule>() // "BaseRule" is an abstract class
.Conventions.Add( DefaultCascade.All() )
.Conventions.Add<OracleTableNameConvention>()
我得到的是:
BaseRule -> Base_Rule
NumberRule -> NumberRule
PatternStringRule -> PatternStringRule
如您所见,实际上只有基类被更改。以下是我现有的约定,以便您了解我是如何定义它的:
public class OracleTableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
string fixedName = instance.EntityType.Name.ToUnderscoredNaming();
instance.Table(fixedName);
}
}
我还研究了ISubclassConvention
接口,没有办法调整表的名称(这很有道理,子类并不总是在它们自己的表中)
如果我从自动映射中删除IncludeBase
行,名称将成为我想要的名称,只是它将成为每个具体类的表。我希望使用每个子类的表,将所有公共数据保留在一个共享的基表中
我可以为每个名称添加覆盖,如果有必要,我也会添加覆盖,但我宁愿不添加
似乎这应该是一种明显受支持的行为。如何将命名约定应用于层次结构中的每个表,而不必针对每个具体类访问表?我一提出这个问题,就明白了
iJoinedSubassConvention
是我需要实现的接口
public class OracleSubClassConvention : IJoinedSubclassConvention
{
public void Apply(IJoinedSubclassInstance instance)
{
string fixedName = instance.EntityType.Name.ToUnderscoredNaming();
instance.Table(fixedName);
}
}
我通过查找任何具有方法
表(字符串)
的内容找到了它。我一发布这个问题,就发现了它
iJoinedSubassConvention
是我需要实现的接口
public class OracleSubClassConvention : IJoinedSubclassConvention
{
public void Apply(IJoinedSubclassInstance instance)
{
string fixedName = instance.EntityType.Name.ToUnderscoredNaming();
instance.Table(fixedName);
}
}
我通过查找任何具有方法表(字符串)
的内容找到了它