nhibernate映射,将值映射到键

时间:2013-05-03 12:53:56

标签: nhibernate fluent-nhibernate nhibernate-mapping

假设我有两张桌子:

Tasks
  -TaskName
  -CategoryID

Categories
  -ID
  -Name

现在,让我说我有一个班级:

Task
  string Name
  string Category   

如何映射这个以便在保存Task对象时,它会查找给定类别名称的类别ID并将其存储在CategoryID字段中?

是否可以使用Fluent nHibernate进行映射?

1 个答案:

答案 0 :(得分:1)

这是不可能的,也不建议设置像这样设计的 Task类( 可以引用Category名称,但您必须在Task表中)存储名称而不是ID

相反,您需要将公共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)
                 });
}

最终结果正是您想要的:任务按名称接收类别,如果类别不存在则抛出错误。