0

2 つのテーブルがあるとします。

Tasks
  -TaskName
  -CategoryID

Categories
  -ID
  -Name

さて、クラスがあるとしましょう:

Task
  string Name
  string Category   

Task オブジェクトを保存するときに、指定されたカテゴリ名のカテゴリ ID を検索し、それを CategoryID フィールドに格納するようにするにはどうすればよいですか?

Fluent nHibernate でマッピングすることは可能ですか?

4

1 に答える 1

1

そのように設計されたドメイン Taskクラスを持つことは不可能であり、推奨されません(名前で参照することCategory可能ですが、ID の代わりに名前をTaskテーブルに格納する必要があります) 。

代わりに、パブリック API を内部ドメイン モデルから分離する必要があります。

class Domain.Task
{
    //From your description, I'm assuming this is an assigned unique id, even though
    //that's not great either
    public virtual string TaskName { get; set; }
    public virtual Category Category { get; set; }
}

class Domain.Category
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
}

class API.Task
{
    public string Name { get; set; }
    public string Category { get; set; }
}

そして、タスクを受け取るメソッド:

public void CreateTask(API.Task task)
{
    session.Save(new Domain.Task
                 {
                     TaskName = task.Name,
                     Category = session.Query<Category>()
                                       .Single(x => x.Name == task.Category)
                 });
}

最終結果はまさにあなたが望むものです。タスクは名前でカテゴリを受け取り、カテゴリが存在しない場合はエラーがスローされます。

于 2013-05-06T13:41:40.427 に答える