2010-10-08 82 views
1

此时我们将所有实体和映射保留在同一个程序集中。我们的实体派生自一个基本类实体,它是一个EntityWithTypedId流利的NHibernate针对不同基类型的不同约定

此外,我们有一个表名称约定告诉复数表名称。

现在我想创建其他两种基本类型e.q. AggregateRootEntity和AggregateEntity都来自实体。 我想创建两个基地实体两组约定:

比方说: 对于从AggregateRootEntity表中派生的所有实体应以“ag_”为前缀,并且增量生成的ID,但是对于所有实体派生从AggregateEntity表中应该以“a_”作为前缀,并且应分配ID。

是否可以根据某些条件设置约定?

回答

1

您可以使用多个约定做,在他们的接受方法的一个特定类型的每个检查

类似:

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维基 http://wiki.fluentnhibernate.org/Acceptance_criteria