そのように設計されたドメイン 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)
});
}
最終結果はまさにあなたが望むものです。タスクは名前でカテゴリを受け取り、カテゴリが存在しない場合はエラーがスローされます。