我是NHibernate的新手,我有些疑惑。我會把我的代碼放在下面,然後我會解釋。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; }
}
我的映射流利的:
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只是會叫ISession.Load從NHibernate的。也許我錯了,但Load在這一刻不會觸及數據庫。
我的問題是如果我在做什麼是正確的。 在這種情況下,如果我在ClientModel中直接更新了一些屬性IntegratorID,會不會更容易?
原因,在我的architeture中,我必須調用BLL的Integrator,調用Load,然後在ClientModel屬性中設置返回值。
此代碼有效,但因爲我是Nhibernate的新手,我認爲可能還有另一種更好的方法。
Thnks!我試圖學習NHibernate在我的公司介紹,並且我想以最好的方式來完成。 – japoneizo 2012-07-12 15:33:32