Nhibernate无法在我的一对多集合中添加+保存项目

时间:2010-07-30 13:22:18

标签: c# .net nhibernate

我似乎在让一对多关系在nhibernate中工作时遇到了重大问题

                                                     

                                                     

我的班级是

public class Kitten
{
    public virtual int? Id { get; set; }
    public virtual String Name { get; set; }
}

public class Product 
{
    public Product()
    {
        Kittehs = new List<Kitten>();
    }
    public virtual int? ProductId { get; set; }
    public virtual string ProductName { get; set; }
    public virtual UnitOfMeasure UOM { get; set; }
    public virtual IList<Kitten> Kittehs { get; set; }
}

这是我的一个片段程序:

第一:

 public class ProductRepository
 // snip
    public void Save(Product saveObj)
    {
        using (var session = GetSession())
        {               
            using(var trans = session.BeginTransaction())   
            {
                session.SaveOrUpdate(saveObj);
                trans.Commit();
            }
        }
    }

然后是调用代码:

        var pNew = new Product { ProductName = "Canned Salmon" ,UOM = uomBottle};        
        var tiddles = new Kitten() {Name = "Tiddles"};
        pNew.Kittehs.Add(tiddles);
        productRepository.Save(pNew); //ERROR here

当我调用productRepository.Save

我得到了

  

{“类型NHibernate.Collection.Generic.PersistentGenericSet1 [Acme.Model.Kitten]无法分配给Acme.Model的System.Collections.Generic.IList1 [Acme.Model.Kitten] setter类型的属性。 Product.Kittehs“}

所以我假设映射是错误的,但我看不到在哪里。

1 个答案:

答案 0 :(得分:2)

嗯......你有一个Set,然后是Acme.Model.Kitten的列表......试着查看你的映射文件。

您正在使用public virtual IList<Kitten> Kittehs { get; set; }  在您的Product类中,但在映射中,此相同属性将映射到Set

将地图映射到IList