此时我们将所有实体和映射保持为相同的程序集。我们的实体派生自一个基本类Entity,它是一个EntityWithTypedId
此外,我们还有一个表格名称,用于表示多重表格名称。
现在我想创建其他两种基本类型e.q. AggregateRootEntity和AggregateEntity都来自Entity。 我想为两个基本实体创建两组约定:
让我们说: 对于派生自AggregateRootEntity表的所有实体,应该以“ag_”为前缀,并且Id是增量生成的,但是对于从AggregateEntity表派生的所有实体,应该以“a_”为前缀,并且应该分配ID。
是否可以根据某些条件设置约定?
答案 0 :(得分:1)
您可以使用多种约定来执行此操作,每种约定都在其Accept方法中检查特定类型
类似的东西:
public class LegacyEntityTableConvention : IClassConvention, IClassConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
{
criteria.Expect(x => x.EntityType.IsAny(typeof(OldClass), typeof(AnotherOldClass)));
}
public void Apply(IClassInstance instance)
{
instance.Table("tbl_" + instance.EntityType.Name);
}
}
只是FNH Wiki中的一段代码 http://wiki.fluentnhibernate.org/Acceptance_criteria