我已经构建了我的 NHibernate 模型来隐藏外键 ID,这似乎是最佳实践,所以不要同时像这样建模关系和键:
public class CompanyOffice
{
public virtual int Id { get; set; }
public virtual int CompanyId { get; set; }
public virtual Company Company { get; set; }
}
我只是有:
public class CompanyOffice
{
public virtual int Id { get; set; }
public virtual Company Company { get; set; }
}
让 NHibernate 负责其余的工作。我喜欢这个,但我有几个表需要设置多个外键,当我创建一个新实体时,在 MVC 操作中,我必须这样做:
public ActionResult CreateNewThing(int stuffId, int whatId, int blahId)
{
var stuff = _service.GetStuffById(stuffId);
var what = _service.GetWhatById(whatId);
var blah = _service.GetBlahById(blahId);
var thing = new Thing { Stuff = stuff, What = what, Blah = blah };
}
这意味着我需要三次访问数据库来获取实体,因为我已经有了 ID 并且可能已经完成了:
var thing = new Thing { StuffId = stuffId, WhatId = whatId, BlahId = blahId };
是否有另一种方法可以在不访问实体数据库的情况下实现我想要做的事情?
我应该咬紧牙关并映射外键以及关系吗?
还是我担心数据库旅行,我应该继续努力吗?