我使用功能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
屬性?
這些都是在黑暗中拍攝純正;我認爲你應該玩弄所有可能的選項和排列,直到有東西粘在一起 - 嘗試僅在基類中或僅在子類中使用IgnoreProperty部分;也許嘗試在子類中的屬性作爲虛擬的,而不是覆蓋... – 2011-04-19 20:32:45
什麼版本的流利nh你使用? – 2011-04-20 03:07:37