0

假设我有两张桌子:

Tasks
  -TaskName
  -CategoryID

Categories
  -ID
  -Name

现在,假设我有一堂课:

Task
  string Name
  string Category   

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

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

4

1 回答 1

1

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

相反,您需要将公共 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 回答