我是 NHibernate 的新手,我有一些疑问。我会把我的代码放在下面,然后我会解释。
我的桌子:
我的课程:
public class IntegratorModel : PGIBaseModel<int>, IIntegratorModel
{
public virtual string Identifier { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
public class ClientModel : PGIBaseModel<int>, IClientModel
{
public virtual string Name { get; set; }
public virtual string TokenPGI { get; set; }
public virtual IIntegratorModel Integrator { get; set; }
}
我使用 Fluent 的映射:
public class IntegratorMappingOverride : IAutoMappingOverride<IntegratorModel>
{
public virtual void Override(AutoMapping<IntegratorModel> mapping)
{
mapping.Map(model => model.Identifier).Column("Identifier").Length(4);
mapping.Map(model => model.Name).Column("Name").Length(200);
mapping.Map(model => model.Description).Column("Description").Length(2000);
}
}
public class ClientMappingOverride : IAutoMappingOverride<ClientModel>
{
public virtual void Override(AutoMapping<ClientModel> mapping)
{
mapping.Map(model => model.Name).Column("Name").Length(200);
mapping.Map(model => model.TokenPGI).Column("TokenPGI").Length(50);
mapping.References<IntegratorModel>(model => model.Integrator);
}
}
我之前在另一个时刻保存了 IntegratorModel,所以当我插入一个新的 ClientModel 时,我已经有了 IntegratorID,所以没关系。
我的问题是当我更新 ClientModel 并且我想更改数据库中的 IntegratorID 时,我正在做这样的事情:
IClientModel model = this.GetModelFromPost();
model.Integrator = integratorBLL.LoadByID(context.Request.Form["IntegratorID"]));
clientBLL.Save(model);
integratorBLL.LoadByID 只会从 NHibernate 调用 ISession.Load。也许我错了,但此时 Load 并没有命中数据库。
我的问题是我所做的是否正确。在这种情况下,如果我在 ClientModel e 中直接更新了一些属性 IntegratorID 会不会更容易?
因为,在我的架构中,我必须调用我的 Integrator BLL,调用 Load,然后在 ClientModel 属性中设置返回值。
这段代码有效,但由于我是 Nhibernate 的新手,我认为可能还有另一种方法可以做得更好。