【问题标题】:Redefining existing mapping重新定义现有映射
【发布时间】: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&lt;Address&gt; Addresses。当我在调试器中查看 ExtendedCustomer 的实例时,Addresses 包含 ExtendedAddress 的实例列表,但我无法在代码中访问 Addresses 的 ExtensionUID 属性。

我能否以某种方式将 Address 属性重新定义为 IList&lt;ExtendedAddress&gt; Addresses,以便我可以使用 ExtensionUID 属性?

我尝试添加new IList&lt;ExtendedAddress&gt; Addresses,但 nhibernate 无法映射它(无法投射...)。 我添加了IList&lt;ExtendedAddress&gt; ExtendedAddresses 属性并定义了这样的映射:HasMany(x =&gt; x.ExtendedAddresses).KeyColumn("CustomerId").AsBag(); 这可行,但现在我有两个具有相同数据的集合。

【问题讨论】:

    标签: c# sql-server nhibernate


    【解决方案1】:

    我不确定,但我认为,你应该编辑你的映射文件。你能把你的映射分享给我们吗?

    而您的客户映射文件可以是这样的;

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    namespace="YourNameSpace" assembly="YourAssemblyName">
    
    <class name="Customer" table="Customer">
    <id name = "ID">
      <generator class = "native"/>
    </id>
    
      <property name="Name"/>
    <property name="SurName" />
    <bag name ="Address"  lazy="true" cascade ="save-update" inverse ="false">
      <key column ="CustomerID"/>
      <one-to-many class ="Address"/>
    </bag>
    
    </class>
    
    </hibernate-mapping>
    

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      相关资源
      最近更新 更多