我有一个“公司”类,其中有一个“运营商”列表
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();
但最终根本没有删除。 有什么帮助吗?
答案 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());