2011-04-18 91 views
3

我使用功能NHibernate映射以下模型:功能NHibernate automappings忽略繼承財產

public abstract class BasePermission : Entity 
{ 
    public abstract string Name { get; } 
} 
public class ApproveMembershipPermission : BasePermission 
{ 
    public override string Name 
    { 
     get { return Resources.Permissions.ApproveMembership; } 
    } 
} 

我已經配置爲使用每類層次結構策略表,一切工作正常,除了一兩件事。我不知道如何告訴FNH爲了避免財產損失Name。 Currenty我生成這樣的映射:

<class name="BasePermission" table="BasePermissions"> 
    <id name="Id" unsaved-value="0"> 
     <column name="Id" /> 
     <generator class="hilo"> 
     <param name="max_lo">1000</param> 
     </generator> 
    </id> 
    <discriminator type="String"> 
     <column name="Type" /> 
    </discriminator> 
    <property access="property" name="Name"> 
     <column name="Name" /> 
    </property> 
    <subclass name="ApproveMembershipPermission" discriminator-value="ApproveMembershipPermission"> 
     <property access="property" name="Name"> 
     <column name="Name" /> 
     </property> 
    </subclass> 
</class> 

我已經試過一個映射覆蓋:

public class BasePermissionMap : IAutoMappingOverride<BasePermission> 
{ 
    public void Override(AutoMapping<BasePermission> mapping) 
    { 
     mapping.IgnoreProperty(x => x.Name); 
    } 
} 
public class ApproveMembershipPermissionMap : IAutoMappingOverride<ApproveMembershipPermission> 
{ 
    public void Override(AutoMapping<ApproveMembershipPermission> mapping) 
    { 
     mapping.IgnoreProperty(x => x.Name); 
    } 
} 

而且它會導致下面的映射:

<class name="BasePermission" table="BasePermissions"> 
    <id name="Id" type="System.Int64" unsaved-value="0"> 
     <column name="Id" /> 
     <generator class="hilo"> 
     <param name="max_lo">1000</param> 
     </generator> 
    </id> 
    <discriminator type="String"> 
     <column name="Type" /> 
    </discriminator> 
    <subclass name="ApproveMembershipPermission" discriminator-value="ApproveMembershipPermission"> 
     <property access="property" name="Name" /> 
    </subclass> 
</class> 

名稱在ApproveMembershipPermission類仍然映射。任何人都可以幫助API來忽略這個Name屬性?

+0

這些都是在黑暗中拍攝純正;我認爲你應該玩弄所有可能的選項和排列,直到有東西粘在一起 - 嘗試僅在基類中或僅在子類中使用IgnoreProperty部分;也許嘗試在子類中的屬性作爲虛擬的,而不是覆蓋... – 2011-04-19 20:32:45

+0

什麼版本的流利nh你使用? – 2011-04-20 03:07:37

回答