Fluent NHibernate (v. 1.3) を使用しており、次の 2 つのエンティティがあります。
public class MyObject
{
public virtual int Id { get; protected set; }
public virtual string Tag { get; set; }
public virtual List ListValue { get; set; }
}
public class List
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
}
マッピングは次のようになります。
public MyObjectMap()
{
Table("my_table");
Id(x => x.Id).Column("dtl_id").GeneratedBy.Native();
Map(x => x.Tag).Column("mfl_tag").Not.Nullable();
References<List>(x => x.ListValue).Column("lst_id").Nullable();
}
public ListMap()
{
Id(x => x.Id).Column("lst_id").GeneratedBy.Native();
Map(x => x.Name).Column("lst_name").Nullable().Length(50);
}
ここで、MyObject (ListValue.Id) に "lst_id" 値を設定したいと思います。
通常は、ListValue プロパティを List オブジェクトのインスタンスに設定するだけですが、特定のケースでは Id だけを持っています。
Id を使用してデータベースから List オブジェクトを取得することもできますが、リスト オブジェクト自体には何もしたくないので、これは不必要に思えます。lst_id 値を設定してオブジェクトを保存したいだけです。
もう 1 つのオプションは、List 内の Id の setter プロパティを protected ではなく public に変更することです。次に、新しい List インスタンスを作成し、Id を任意の値に設定して、それを MyObject.ListValue に割り当てます。これも機能しますが、Id はデータベースによって生成され、setter を保護されているため、明らかに間違っているように感じます。
3番目のオプションはありますか?