NHibernate.MappingException:没有持久性:System.Int32

时间:2012-07-09 14:57:48

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

我有以下......

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:对于预期的“产品”属性   '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]]'

如果我离开它 CheckList 我得到

  

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)的实体。 如果有人想扩展它,请随意。

1 个答案:

答案 0 :(得分:2)

这个问题似乎是因为我试图对int使用持久性规范测试,而持久性规范测试实际上只接受名称(str)的实体。如果有人想扩展它,请随意。