流利的nhibernate地图项目列表

时间:2011-11-24 09:20:02

标签: nhibernate list nhibernate-mapping bag

我有一个“公司”类,其中有一个“运营商”列表

public class Company
{
   public IList<Opertator> Operators {get; set; }
   public Int32 Id {get; set;}
}

public class Operator {
   public Int32 Id {get; set; }
  public Company Company {get; set; }
}

当我映射如下:

public class CompanyMapping : ClassMap<Company>
    {
        public ProductMapping() : base()
        {
            Id(x => x.Id, "CompanyId").GeneratedBy.Native();
            HasMany(x => x.Operators);
         }
    }

public class OperatorMapping : ClassMap<Operator>
{
    public OperatorMapping() 
    {
          Id(x => x.Id);
          Reference(x => x.Company);
    }
}

我有一个UI,用户可以通过复选框添加运算符和删除运算符。 在c#代码中,我查询存储的公司,并添加到列表中,或从列表中删除。 然后发送SaveOrUpdate。 我的问题是,当我向现有公司添加一个运营商,并保存/更新时,NHibernate正在删除整个列表,并再次重新发布它们。

我不想那样做。 我可以拥有它,NHibernate将检测更改的项目(列表中的新项目,并插入它们,并确定已删除的项目并删除它们)?

我尝试将映射更改为公司映射

HasMany(x => x.Operators).Inverse();

但最终根本没有删除。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

Inverse表示运营商负责协会,您必须在向公司添加Operator时进行设置

public class Company
{
    public Int32 Id {get; set;}

    public ICollection<Opertator> Operators {get; private set; }

    public void Add(Opertator operator)
    {
        Operators.Add(operator);
        operator.Company = this;
    }

    public Company()
    {
        Operators = new List<Operator>();
    }
}

// and

HasMany(x => x.Operators).Inverse();

// use it like

company.Add(new Operator()); // instead of company.Operators.Add(new Operator());