假设我有两张桌子:
Tasks
-TaskName
-CategoryID
Categories
-ID
-Name
现在,假设我有一堂课:
Task
string Name
string Category
如何映射它,以便在保存 Task 对象时,它将查找给定类别名称的类别 ID 并将其存储在 CategoryID 字段中?
是否可以使用 Fluent nHibernate 进行映射?
假设我有两张桌子:
Tasks
-TaskName
-CategoryID
Categories
-ID
-Name
现在,假设我有一堂课:
Task
string Name
string Category
如何映射它,以便在保存 Task 对象时,它将查找给定类别名称的类别 ID 并将其存储在 CategoryID 字段中?
是否可以使用 Fluent nHibernate 进行映射?
这是不可能的,也不建议使用这样设计的域 Task
类(可以按名称引用,但您必须在表中存储名称而不是 ID)Category
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)
});
}
最终结果正是您想要的:任务按名称接收类别,如果类别不存在则抛出错误。