假设我有两张桌子:
Tasks
-TaskName
-CategoryID
Categories
-ID
-Name
现在,让我说我有一个班级:
Task
string Name
string Category
如何映射这个以便在保存Task对象时,它会查找给定类别名称的类别ID并将其存储在CategoryID字段中?
是否可以使用Fluent nHibernate进行映射?
答案 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)
});
}
最终结果正是您想要的:任务按名称接收类别,如果类别不存在则抛出错误。