【发布时间】:2017-12-11 21:17:38
【问题描述】:
我有客户和地址表以及具有一对多关系的实体(客户有多个地址)。 我无法更改客户和地址实体。我需要向 Customer 和 Address 添加一个属性,因此我使用 ExtendedCustomer 和 ExtendedAddress 实体,在 EntitiyType 列上区分它们,并且它们都在 SubclassMap 中映射了 ExtensionUID 属性。我将此列添加到 SQL 表中。
public class ExtendedCustomer :Customer
{
public virtual string ExtensionUID { get; set; }
}
public class ExtendedCustomerMap : CustomerMap
{
public ExtendedCustomerMap ()
{
DiscriminateSubClassesOnColumn("EntityType", (byte)0).Not.Nullable();
}
}
public class ExtendedCustomerSubclassMap : SubclassMap<ExtendedCustomer>
{
public ExtendedCustomerSubclassMap()
{
DiscriminatorValue(1);
Map(x => x.ExtensionUID);
}
}
//Same stuff for Address/ExtendedAddress
以上所有这些都有效。
现在,问题在于客户定义了属性IList<Address> Addresses。当我在调试器中查看 ExtendedCustomer 的实例时,Addresses 包含 ExtendedAddress 的实例列表,但我无法在代码中访问 Addresses 的 ExtensionUID 属性。
我能否以某种方式将 Address 属性重新定义为 IList<ExtendedAddress> Addresses,以便我可以使用 ExtensionUID 属性?
我尝试添加new IList<ExtendedAddress> Addresses,但 nhibernate 无法映射它(无法投射...)。
我添加了IList<ExtendedAddress> ExtendedAddresses 属性并定义了这样的映射:HasMany(x => x.ExtendedAddresses).KeyColumn("CustomerId").AsBag(); 这可行,但现在我有两个具有相同数据的集合。
【问题讨论】:
标签: c# sql-server nhibernate