2

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番目のオプションはありますか?

4

1 に答える 1

5

試す

Model.List = session.Load<List>(yourid);

これは、データベースへのトリップを行いません。

于 2013-02-28T12:00:02.933 に答える