- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题困扰了我一段时间。但我不是专家。这个有点长。。。
我有一个带有 Outlook 样式 UI 的 WinForms 应用程序。也就是说,左侧 Pane 中有一个栏,允许您选择一个“屏幕”,它是一个 WinForms 控件,例如客户屏幕,在右侧 Pane 中将出现一个客户列表(即客户控制)。我称之为资源管理器界面。双击记录将在附加窗口中显示非模态客户记录,就像您在 Outlook 中打开电子邮件一样,我们称之为检查员。如果您双击多条记录,您将获得多个检查员。
整个事情是使用数据绑定(bind)完成的。客户列表控件上有一个 BindingSource 控件,客户检查器上有另一个。客户控件在其加载事件中更新静态 DataContext,并将简单 Linq-To-SQL 查询的结果分配给 BindingControl 数据源属性。双击客户列表时,事件查找记录,将其转换为 Linq-To-SQL 客户对象,并将其提供给客户检查器表单的构造函数。客户检查器获取客户对象并将其 BindingSource 控件的数据源属性分配给它。
由于 BindingSource 控件支持 IBindingList,因此在调用 EndEdit 之前,不会修改客户对象的内容,在此应用程序中,当单击 OK 按钮时。由于 Linq to SQL 实现了 INotifyPropertyChanged 接口(interface),因此客户列表将被更新。凉爽的。
但是,当我想刷新客户列表的内容以获取其他用户所做的更改时,问题就来了,我希望每隔 60 秒定期发生一次。如果我有一个计时器并在同一个数据上下文上重新运行查询,则不会获取任何更改,因为 Linq to SQL 不想压缩在数据上下文控制下对数据所做的任何更改。奇怪的是,它对数据库运行查询,但身份跟踪意味着只有从数据库返回的新客户对象才会添加到列表中。如果我新建了另一个数据上下文,那么任何开放的客户检查员都不再使用相同的数据上下文,因此 future 对开放客户检查员的任何更改都不会反射(reflect)在客户列表中。
基本上数据是陈旧的,因为我没有使用工作单元模式。所以(如果你还和我在一起),问题是。
1. 在这种情况下,我到底如何让工作单元模式工作? ASP.NET 使用请求范围的数据上下文很容易,它的生命周期很短,但是在 WinForms 中呢?
2. 在这种情况下,还有其他的 ORM 会更好吗? NHibernate、EF、LLBLGEN 等
3. 我还应该怎么做?
并且。
4. 如果我可以让 Linq to SQL 像这样工作,是否有人在 Linq to SQL 部分类中实现了 IBindingList,这将避免我不得不使用 IBindingSource 控件。 (我不确定我应该关心这个)。
5. 如果我可以让 Linq to SQL 像这样工作,有什么方法可以在 SQL 2008 中使用 SQL 通知,以便在底层查询结果发生更改时通知我并重新查询,而不是轮询。
谢谢!
附言我知道我可以使用
db.Refresh(System.Data.Linq.RefreshMode.KeepChanges, customers)
最佳答案
我将重申你的问题,以确保我已经理解它。
您有一个显示实体列表(列表)的小部件。当您单击 LIST 中的项目时,会出现另一个小部件,允许用户编辑实体。当用户完成对实体的编辑后,他们的更改将提交到数据库,并且也应该反射(reflect)在实体列表中。系统还应定期获取其他用户对 LIST 中的项目所做的更改并更新 LIST。
如果这是正确的,我将抛开两个用户编辑同一个实体的任何并发问题,因为这似乎不是您关心的问题,并将重点关注如何组织 UI 和工作单元。
您需要将 LIST 中的实体与检查员正在编辑的实体分开。检查员代表的业务流程是您的工作单元,每个实体一个单元。您的列表不代表一个工作单元。它是所有先前提交的工作单元的组合工作的陈旧表示或时间点。您的 LIST 甚至不必直接处理您的实体,它可以保存一个 ID 或任何其他方式,以便您的检查员在用户单击它时从数据库中获取基础实体。现在,您可以随时更新列表,因为您的检查员根本不与它共享实例。
为了向您的用户模拟,当他们通过检查器编辑实体并使它们看起来绑定(bind)到同一事物时,您有两个选择。
1)列表只绑定(bind)到数据库中的已提交数据。这很容易,当检查员将本地更改刷新回数据库并成功提交时,为检查员提供了一种告诉列表进行自我更新的方法。
2)列表绑定(bind)到已提交数据+本地未提交数据。这有点困难,您需要在列表中公开方法,这些方法允许检查员胜过从 Db 返回的数据,并用自己的本地脏数据覆盖它。
关于.net - WinForm绑定(bind)场景中的Datacontext Lifetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/381017/
我在我的项目中添加了一个 LinqToSQL 类并将它放在我的 App_code 文件夹中。 然后,我将 LinqDataSource 添加到新网页并尝试将其配置为使用此类,但它并未在 DataCon
在我的带有 EF6 的 MVC 5 应用程序中开始使用接口(interface)和 Ninject 并遇到了问题。 我调用多个实现来获取数据,当保存它时,实体断开连接并且存在多对多和类似问题。 所以我
因此,我在我的 View 模型中保留了一个对象 NewMyItem 作为负责在列表中添加新项目的控件的 DataContext。每当执行 AddCommand 时,我都会重置该对象,以便它可以添加另一
这个问题与我之前在这里的问题有关:Predicate won't validate parameter correctly 首先是关于我的模型的一些信息: 基础 View 模型: public abs
我正在尝试使用数据绑定(bind)将 ObservableCollection 绑定(bind)到 DataGrid 的 ItemsSource,因为我了解了 WPF 和其他东西。 在代码隐藏中,我可
使用 Linq-to-Sql 时,Visual Studio 会为您创建一个 DataContext 类。我想知道什么时候实例化这个上下文,在我的一个项目中,我使用了一个 DataContext 实例
我有一个包含控件的窗口。 该控件有一个设置为 DataContext 对象的 View 模型。 Window 对象有自己的 ViewModel 设置为 DataContext。 如果我在 Window
您好,我正在尝试制作一个带有 PathData 的自定义按钮。到目前为止,我已经设法查看了其中的路径。但是我的 Button 没有接受 MVVM 命令。 自定义按钮 XAML
我对MVVM特别陌生。 我有以下XAML代码:
我在使用 linq to sql 进行 asp.net c# Web 应用程序的 DataContexts 时遇到一些问题。 我首先遇到了抛出异常的问题,因为我没有处理 DataContext,与 t
作为问题的延续Linking DataContext with another property in WPF . 在研究的最后,我非常惊讶地发现,当有人写下这样的东西时: Content 属性所绑
这应该很容易,但它会引发 VS2008 的严重循环。 我正在尝试使用 MVVM 的 WPF,尽管我已经开发了大约 15 年,并且有一个比较,但我还是一个新手。科学。程度。在当前客户端,我需要使用 VB
我在这样的后台线程中为 wpf 窗口获取数据 [framework 4.0 with async/await]: async void refresh() { // returns objec
当心,这是一个相当基本的问题(我认为)。 我有一个名为 MyUserControl 的 UserControl。我在我的 ListBox 的 DataTemplate 中使用它: 现在我想在 MyU
我有一个应用程序需要将来自多个数据库的表连接到单个 LINQ-to-SQL 查询中。不幸的是,我为每个数据库设置了一个单独的 DataContext 类,因此该查询将不起作用。我收到这样的错误:“查询
是否可以通过 XAML 将一些数据传递到绑定(bind)源/数据上下文? 在我的特定情况下,我希望为绑定(bind)源提供对创建它的窗口的引用。 例如:
我一直在查看 MSDN 文章 WPF Apps With The Model-View-ViewModel Design Pattern . 上面的文章展示了他是如何使用DataTemplate 来显
我使用 VS 2008 中的 ORM 设计了我的数据库。 将其导出到 SQL Server 以便在 SQL Server 上创建表和关系的最佳方法是什么? 谢谢, 京东 最佳答案 如果您使用的是 LI
我在 C#、WPF 中有以下代码: base.DataContext = new DataTemplate[] { new Da
我有一个以这种方式在父控件中使用的 UserControl: 父控件 DataContext 是一个包含 SelectedEntity 属性的 ViewModel。 在我的子 UserControl
我是一名优秀的程序员,十分优秀!