我有以下...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)接受實體來說。 如果有人想擴大這一點,請隨意。