C# 采用NHibernate的DAL设计/荷载方法 public MyClass(int-someUniqueID) { 使用(//会话逻辑) { var databaseversionofmycass=session.CreateCriteria(/*criteria*/) .UniqueResult(); //负载逻辑 } }

C# 采用NHibernate的DAL设计/荷载方法 public MyClass(int-someUniqueID) { 使用(//会话逻辑) { var databaseversionofmycass=session.CreateCriteria(/*criteria*/) .UniqueResult(); //负载逻辑 } },c#,nhibernate,constructor,instance,data-access-layer,C#,Nhibernate,Constructor,Instance,Data Access Layer,上面的代码示例是我当前的方向,尽管我已经到了需要进行一点理智检查的地步 对于NHibernate(我在这方面是绿色的),从类构造函数中的数据库实例化对象是常见的还是最佳实践?我认为,另一种选择是使用静态方法从数据库返回对象 我还遇到了一个关于的相关问题,但是我认为这个实现不适合工厂的方法 要在上面添加一个额外的问题,如果构造函数中的实例化是一种方法,那么我过去总是使用某种Load()方法。可以是一个特定的私有方法,它将返回的db对象中的属性与新类进行匹配,也可以是通过一个通用的反射方法,该方法假

上面的代码示例是我当前的方向,尽管我已经到了需要进行一点理智检查的地步

对于NHibernate(我在这方面是绿色的),从类构造函数中的数据库实例化对象是常见的还是最佳实践?我认为,另一种选择是使用静态方法从数据库返回对象

我还遇到了一个关于的相关问题,但是我认为这个实现不适合工厂的方法


要在上面添加一个额外的问题,如果构造函数中的实例化是一种方法,那么我过去总是使用某种Load()方法。可以是一个特定的私有方法,它将返回的db对象中的属性与新类进行匹配,也可以是通过一个通用的反射方法,该方法假定属性名称将匹配。我很好奇是否有其他方法“加载”我错过的对象。

我不喜欢这种方法。 总之,最好实现某种存储库,为您检索持久化类的实例。 作为替代方案,您也可以遵循ActiveRecord方法,在类中可以有一个静态的“Load”方法,例如一个实例方法“Save”。(看看Castle ActiveRecord)


但是,对我来说,我更喜欢存储库方法。

我认为存储库模式和工作单元模式可能是我需要遇到的。我在LINQ世界呆了一段时间,慢慢地回到现实中;)谢谢你的回复,弗雷德里克。
public MyClass(int someUniqueID)
{
    using(//Session logic)
    {
    var databaseVersionOfMyClass = session.CreateCriteria(/*criteria*/)
        .UniqueResult<MyClass>();

    //Load logic
    }
}