我有以下...
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();
}
如果我将 CheckList 更改为CheckProperty我得到
System.ApplicationException:对于属性 '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,文化=中性,PublicKeyToken=b77a5c561934e089]]'
如果我离开它,我会得到
NHibernate.MappingException:没有持久性: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)的实体。如果有人想对此进行扩展,请随意。