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

ユーザーが演算子を追加したり、ボックスをチェックして演算子を削除したりできる UI があります。C# コードで、格納されている会社を照会し、リストに追加するか、リストから削除します。次に、SaveOrUpdate を送信します。私の問題は、既存の会社にオペレーターをもう 1 つ追加し、保存/更新すると、NHibernate がリスト全体を削除し、再度それらを再インストールすることです。

私はそれをしたくありません。NHibernate が変更された項目 (リストからの新しい項目を検出して挿入し、削除された項目を特定して削除する) を取得できますか?

会社のマッピングにあるようにマッピングを変更しようとしました

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

しかし、それはまったく削除されません。何か助けはありますか?

4

1 に答える 1

0

インバースは、オペレーターが協会に責任があり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());
于 2011-11-24T14:41:13.103 に答える