1

我有以下...NHibernate.MappingException:沒有留存爲:System.Int32

public class TempCartMap : ClassMap<TempCart> 
{ 
    Id(x => x.Id).GeneratedBy.Identity(); 
    ... 
    HasMany(x => x.Products) 
    .Inverse().Cascade.AllDeleteOrphan() 
     .Table("tblCartProducts") 
      .Element("ProductId").KeyColumn("CartId").AsBag(); 
} 

[Serializable] 
public class TempCart { 

    public TempCart(){ 
    Products = new List<int>(); 
    } 

    public virtual IList<int> Products { get; set; } 

} 

並有持久性規範:

[Test] 
    public void CanMapSaleCart() 
    { 
     SystemTime.Freeze(); 

     IList<int> list = new List<int> {1, 2, 3}; 

     new PersistenceSpecification<SaleCart>(Session) 
         //Other PropertyChecks that work fine without the Next check 
         .CheckList(x => x.AdditionalProducts, list) 
         .VerifyTheMappings(); 
      } 

如果我改變覈對表CheckProperty我得到

System.Applic ationException:對於屬性'Products'預期 'System.Collections.Generic.List 1[System.Int32]' of type 'System.Collections.Generic.List 1 [[System.Int32,mscorlib, Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]' '但是得到了''類型 'System.Collections.Generic.IList`1 [[System.Int32, mscorlib程序,版本= 4.0.0.0,文化=中性 公鑰= b77a5c561934e089]]'

如果我離開它覈對表我得到

NHibernate.MappingException:No pers ister for:System.Int32

讓我發瘋!


---附加

如果我刪除.Inverse()。Cascade.AllDeleteOrphan() 並創建一個新的測試(不使用持久層規範)

[Test] 
public void CanMapSaleCartWithAdditionalProducts() 
{ 
    SaleCart sCart = FactoryGirl.Build<SaleCart>(); 
    sCart.AdditionalProducts = new List<int> { 1, 2, 3 }; 

    Session.Save(sCart); 
    FlushAndClear(); 
} 

這可以節省爲我期望它,創建銷售車,然後將產品添加到其他表。

TLDR: 這個問題似乎是因爲我想用INT上一個持久層規範測試,而實際上持久層規範測試只能通過名字(STR)接受實體來說。 如果有人想擴大這一點,請隨意。

回答

2

此問題似乎是因爲我試圖對int使用持久性規範測試,而持久性規範測試實際上只通過名稱(str)接受實體。如果有人想擴大這一點,請隨意。

相關問題