【发布时间】:2015-09-05 04:36:17
【问题描述】:
我正在使用WPF 和NHibernate,当前使用带有多个线程的单个会话,这会导致与this 链接相同的许多错误。所以现在我必须在完成后立即开始和关闭会话。但问题将是惰性数据。我很困惑如何使用 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;}
}
我将从列表中的数据库中获取数据并将其作为itemsource 提供给 DataGrid,如下所示
<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>
因此,当我关闭连接以及DataGrid 显示该时间时,由于会话已关闭,我变得懒惰异常。我不知道我该怎么办。
如果会话关闭,任何人都可以推荐使用 MVVM 获取惰性数据。我不想使用急切加载作为解决方案。
请让我知道您需要更多信息。
谢谢 安吉特
【问题讨论】:
-
我会避免使用“最佳”一词,因为这会导致问题以基于意见的方式结束。
-
最好删除 :) 我只是想知道如何解决这个问题
标签: c# wpf session nhibernate mvvm