私は非常に単純なオブジェクト モデルを持っています。
public class Contact
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Device Device { get; set; }
public virtual IList<string> Numbers { get; set; }
public Contact()
{
Numbers = new System.Collections.Generic.List<string>(3);
}
}
ご覧のとおり、クラス Contact は、文字列のリストである Numbers と関連付けられています。
マッピングは次のとおりです。
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device, "DeviceId");
Table("Contacts");
HasMany(x => x.Numbers)
.Table("ContactNumbers")
.Element("Number")
.KeyColumn("ContactId")
.LazyLoad()
.Cascade.All()
.Not
.Inverse();
コレクションは単なる文字列のコレクションであるため、コレクションを inverse=true にすることはできませんし、したくないことに注意してください。これは、Contact が Numbers エントリの更新を担当することを意味します。ここでの問題は、既存の連絡先に新しい番号を追加しようとすると、関連付けられているすべての番号が削除され、個別に再作成されることです。NHibernate は、変更を検出して変更された項目のみを更新するほどスマートではありませんか?
私の問題には簡単な解決策があるはずですが、何がわかりません。
どんな助けでも大歓迎です。