1

我有一个“公司”类,其中有一个“操作员”列表

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);
    }
}

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

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

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

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

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

4

1 回答 1

0

Inverse 表示 Operator 负责关联,您必须在添加Operator到 Company时设置它

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());
于 2011-11-24T14:41:13.103 回答