gpt4 book ai didi

c# - WPF MVVM 中的 NHibernate session

转载 作者:太空狗 更新时间:2023-10-29 23:50:34 26 4
gpt4 key购买 nike

我正在将 WPFNHibernate 一起使用,目前正在使用带有多个线程的单个 session ,这导致了与 this 相同的许多错误关联。所以现在我必须在完成后立即开始和关闭 session 。但问题将是惰性数据。我很困惑我将如何使用 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 显示该时间时,我会收到延迟异常,因为 session 已关闭。我不知道我该怎么办。如果 session 关闭,任何人都可以推荐使用 MVVM 获取惰性数据。我不想使用预先加载作为解决方案。

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

谢谢安琪

最佳答案

在大多数情况下,您有三个选项,它们独立于您使用的 ORM,因为 ORM 的行为非常相似:

  • 让 session /上下文对象与 View 模型一样长;
  • 构建模型(MVVM 中的“M”),允许您在需要时懒惰地获取数据(每次都创建新的 session /上下文对象)。这将关闭 ORM 的延迟加载,因为模型正在自行管理延迟加载;
  • 抛弃延迟加载并加载 View 模型所需的一切。

关于c# - WPF MVVM 中的 NHibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com