2010-03-10 39 views
1

我試圖映射同一列是使用下面的映射屬性和關係(具有與傳統的數據做的原因):NHibernate的:如何映射同一列是屬性和關係

References(x => x.BaseProductTemplate, "ProductCodeTxt"); 
Map(x => x.DescriptionCode, "ProductCodeTxt") 
       .CustomType(typeof(TrimmedStringUserType)); 

但「System.IndexOutOfRangeException:此Count = 9的SqlParameterCollection的索引9無效。」拋出異常。我怎樣才能達到這與NH沒有得到這個錯誤。

這裏是一個類:

public static MarketingPlanBaseProduct Create(BaseProductTemplate baseProductTemplate, ProductType productType) 
     { 
      var toReturn = new MarketingPlanBaseProduct(); 

      toReturn.BaseProductTemplate = baseProductTemplate; 
      toReturn.Type = productType; 


      return toReturn; 
     } 

     protected MarketingPlanBaseProduct() 
     { 
      _coInsurancePercentages = new List<PlanCoInsurance>(); 
      _benefits = new List<BaseProductBenefit>(); 
     } 


    #region " Old system workaround " 

     /// HACK: In insight users were able to override description and the code, and system was displaying description from 
     /// the "BaseProduct" table, not from "ProductRef" table. In order to have this description display in Insight 
     /// during transitional period 
     /// we are modeling the MarketingPlanBaseProduct with two independent properties 
     /// that will be loaded based on the values in "ProductCodeTxt" and ProductNameTxt. 
     /// New MarketingPlanBaseProducts will however have description populated based on BaseProductTemplate ("ProductRef") 
     /// and code/description will not be changable from New System 
     /// Once old system is cut off, "DescriptionCode" Property should be removed, 
     /// "Name should be changed to be mapped property that derives value from BaseProductTemplate relationship 

     private string _descriptionCode; 
     public virtual string DescriptionCode 
     { 
      get 
      { 
       return _descriptionCode; 
      } 
     } 

     private string _name; 
     public virtual string Name 
     { 
      get { return _name; } 
     } 

     private void SetName(BaseProductTemplate baseProductTemplate) 
     { 
      _name = baseProductTemplate.Name; 
      _descriptionCode = baseProductTemplate.Code; 
     } 

    private BaseProductTemplate _baseProductTemplate; 
     public virtual BaseProductTemplate BaseProductTemplate 
     { 
      get 
      { 
       return _baseProductTemplate; 
      } 
      private set 
      { 
       _baseProductTemplate = value; 
       SetName(_baseProductTemplate); 
      } 
     } 
+0

這是流利,NHibernate的映射。你能否爲我們提供你的領域模型,以便我們能夠更好地找出你想在這裏描述的關係? –

回答

0

,因爲這是映射的觀點,我與映射到同一列不同的名稱視圖增加了一個欄,和它的作品。

2

您還可以使用公式:

Map(x => x.MyProperty).Formula("propertyColumn").Not.Insert().Not.Update();