WPF MVVM中的NHibernate会话

Anc*_*oli 5 c# nhibernate wpf session mvvm

我使用WPFNHibernate目前正在使用与多发线,是造成如此多的错误同一个会话链接.所以现在我必须在完成后立即开始和关闭会话.但问题将是懒惰的数据.我很困惑如何用MVVM获取它们如下: -

class Product
{

public virtual string name{get;set;}
public virtual Session session{get;set;} // Lazy
public virtual Categories cate{get;set;} //Lazy
public virtual Warehose warehouse{get;set;} //Lazy

  public virtual string NAME
        {
            get { return Name; }
            set
            {
                Name = value;
                OnPropertyChanged("NAME");
            }
        }

 public virtual string TerminalName
        {
            get { return session.terminal.terminalName; }
            set
            {
                session.terminal.terminalName= value;
                OnPropertyChanged("TerminalName");
            }
        }

 public virtual string CateName
        {
            get { return session.cate.catename; }
            set
            {
                session.cate.catename= value;
                OnPropertyChanged("CateName");
            }
        }

 public virtual string UserName
        {
            get { return session.user.username; }
            set
            {
                session.user.username= value;
                OnPropertyChanged("UserName");
            }
        }

}

class Categories {
public virtual string catename{set;get;}
}

class Warehose {
public virtual string warename{set;get;}
}

class Session{
public virtual People user{get;set;} //Lazy
public virtual Terminal terminal{get;set;} //Lazy
//... other properties
} 

Class People{
public virtual string username{set;get;}
}

Class Terminal{
public virtual string terminalName{set;get;}
}
Run Code Online (Sandbox Code Playgroud)

我将从列表中的数据库中获取数据并将其提供给DataGrid,itemsource如下所示

<DataGrid Name="saleDataGrid"
<DataGrid.Columns >
 <DataGridTextColumn Binding="{Binding NAME}" FontSize="12" 
  CanUserResize="False" Width="70" Header="Code"/>

 <DataGridTextColumn Binding="{Binding TerminalName}" FontSize="12" 
 Header="Desciption" Width="120" CanUserResize="False"/>

 <DataGridTextColumn Binding="{Binding CateName}" FontSize="12" 
  Header="Price" Width="50" CanUserResize="False"/>

 <DataGridTextColumn Binding="{Binding UserName}" FontSize="12" 
 CanUserResize="False" Width="45" Header="QTY"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

所以当我关闭连接并DataGrid显示那个时候我因为会话关闭而变得懒惰.我不知道该怎么办.如果会话关闭,任何人都可以建议使用MVVM获取延迟数据.我不想使用急切加载作为解决方案.

请告诉我您需要更多信息.

谢谢Anchit

Den*_*nis 0

大多数情况下,您有三个选项,它们与您使用的 ORM 无关,因为 ORM 的行为非常相似:

  • 让会话/上下文对象的寿命与视图模型的寿命一样长;
  • 以允许您在需要时延迟获取数据的方式构建模型(MVVM 中的“M”)(每次创建新的会话/上下文对象)。这会关闭 ORM 的延迟加载,因为模型自己管理延迟加载;
  • 抛弃延迟加载并加载视图模型所需的所有内容。