Tag: datacontext

如何正确管理DataContext的处理?

我有一个非常重的数据库访问的Web服务。 它在测试中运行良好,但是一旦我将它投入生产并加速加载,它就会开始产生在DataContext中调用某个方法时引发的错误。 错误通常是以下之一: 你调用的对象是空的 无法访问已处置的对象。 对象名:’Dispose后访问的DataContext。’。 但不总是。 任何单个Web服务请求都可能导致多达10或15个数据库查询以及1或2个更新。 我设计了一个带有数据访问层的应用程序,这是一组对象,表示我的数据库中包含所有业务逻辑的表。 这是我的Web服务的一个单独项目,因为它与Web GUI共享。 数据访问对象派生自一个基类,该基类具有GetDataContext()方法,可在需要时启动数据上下文的实例。 我写的所有数据访问对象都是: using (db = GetDataContext()) { // do some stuff } 为每个数据库交互愉快地创建/使用/处置我的DataContext(由sqlmetal.exe创建)对象。 经过几个小时的搔抓,我想我已经确定我的错误的原因是在加载时datacontext对象被创建和处理的方式太多了,我需要更改东西以共享相同的datacontext持续时间Web服务请求。 我发现这篇文章在互联网上有一个DataContextFactory,似乎完全符合我的需要。 但是,现在我已经实现了这个,并且DataContext被保存为HttpContext中的一个项目,我得到… 无法访问已处置的对象。 对象名:’Dispose后访问的DataContext。’ …每当我的datacontext被多次使用时。 这是因为我的use using (…) {}代码在首次使用后处理我的datacontext。 所以,我的问题是……在我浏览整个数据访问层并删除大量使用usings ,这样做的正确方法是什么? 我不想通过取出使用来导致内存泄漏,但同时我想在不同的数据访问对象之间共享我的datacontext。 我应该只是删除使用,并在我从Web服务请求返回之前手动调用dispose方法吗? 如果是这样,我怎么去确保我捕捉到所有的东西,记住我有几个可能变得凌乱的try-catch块。 还有另一种更好的方法吗? 我应该忘记处理并希望一切都被隐瞒了吗? UPDATE 问题似乎不是性能问题……请求处理非常快,不超过200毫秒。 事实上,我已经通过生成大量虚假请求进行负载测试而没有任何问题。 据我所知,它与负载有关的原因有两个: 大量请求会导致并发请求相互影响 问题更频繁地发生,因为有很多请求。 当问题确实发生时,应用程序池将进入错误状态,并需要循环才能使其再次运行。

访问IQueryable后面的DataContext

是否可以访问IQueryable后面的DataContext对象? 如果是这样,怎么样?

条件资源创建WPF XAML设计/运行时

关于WPF级联绑定的第一个问题, 我注意到我在MainWindow和UserControls中定义了比预期更多的资源 : 这在Snoop中很常见 MainWindow XAML有一个MainWindow ViewModel的“实例”,用绿色和蓝色绘制2个用户控件 另外,2个UserControl中的每一个都有2个usercontrol视图模型的实例,它们将内部圆圈涂成红色 我在Usercontrol中的第一个意图是能够看到“ 实时 ”我的控件的样子(我把它涂成红色以区分这个“模型”与主窗口中的绿色和蓝色圆圈) 我的资源创建非常便宜,所以无论我是否有2个额外的资源仍然存在于我的应用程序中,但我预计我的资源将更昂贵的时间… 最后我的问题是: 我怎样才能在“低级”控件中创建资源(这样我可以在控件的视图中进行预览) 但在运行完整的应用程序(或主窗口的视图)时阻止这种创建,因为我会绑定到此上一级的资源。 提前谢谢了。 最好的祝福。 NGI

WPF的DataContext问题

我问过它如何使用INotifyPropertyChanged接口( WPF INotifyPropertyChanged如何工作? ),它要求我将XAML的DataContext连接到INotifyPropertyChangedinheritance实例,如下所示。 MainViewModel model = new MainViewModel(); this.DataContext = model; 我还建议对每个XMAL使用的DataContext发表评论( http://joshsmithonwpf.wordpress.com/2009/10/24/xaml-tip-datacontext-comment/ )。 当我有多个XAML文件,并且当我想将DataContext链接到不同的ViewModel时,我想我需要让每个XAML.CS文件包含这个代码(模型因每个xaml.cs而异): this.DataContext = model; 。 它是否正确? 如何在XAML文件中执行相同的操作? 这个DataContext背后的魔力是什么? 我的意思是,DataContext是如何工作的?

我的WPF自定义控件的数据上下文正在取代父级

在我的主窗口中,我尝试绑定到一个布尔。 但它正在查看我的自定义控件的数据上下文。 如果我没有在用户控件中分配DataContext,那么主窗口的绑定工作,但(显然)这会在用户控件中制动绑定。 这是错误: System.Windows.Data Error: 40 : BindingExpression path error: ‘MyControlVisible’ property not found on ‘object’ ”MyUserControlModel’ (HashCode=1453241)’. BindingExpression:Path=MyControlVisible; DataItem=’MyUserControlModel’ (HashCode=1453241); target element is ‘MyUserControl’ (Name=’_myUserControl’); target property is ‘Visibility’ (type ‘Visibility’) 我需要绑定才能在两个控件上工作,但我不希望用户控件的datacontext取代窗口。 这是代码: namespace Sandbox { public partial class MainWindow { private MainWindowModel model; public MainWindow() { InitializeComponent(); DataContext = model = new […]

LINQ-to-SQL表 .Attach做什么?

LINQ-to-SQL方法Table.Attach()和Table.AttachAll()究竟是什么?它们正确用法的示例/情况是什么? 另外,请查看以下相关问题: 如何从DataContext的跟踪机制中分离LINQ-to-SQL数据对象?

可访问性问题不一致

我正在关注Rob Conery MVC店面教程系列,并且我从以下构造函数public SqlCatalogRepository(DB dataContext)获得了一个不一致的可访问性错误: public class SqlCatalogRepository : ICatalogRepository { DB db; public SqlCatalogRepository() { db = new DB(); //turn off change tracking db.ObjectTrackingEnabled = false; } public SqlCatalogRepository(DB dataContext) { //override the current context //with the one passed in db = dataContext; } 以下是错误消息:错误1可访问性不一致:参数类型“SqlRepository.DB”比方法“Data.SqlCatalogRepository.SqlCatalogRepository(SqlRepository.DB)”更难访问

KeyedCollection和d:DataContext设计错误

请参阅下面的VS2013更新。 当使用类作为暴露KeyedCollection的d:DesignInstance ,XAML设计器会抱怨以下警告: 提供的generics参数的数量不等于generics类型定义的arity。 参数名称:instantiation 可以使用以下简单程序重现该问题: namespace Test { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } public class MyClass { public KeyedCollection SettingsModule { get; private set; } } } 我无法为暴露KeyedCollection任何类提供设计时形状。 有什么想法在这里发生了什么? 更新:从VS2013开始,设计人员处理KeyedCollection的行为已经改变(尽管仍未完全发挥作用)。 上面的示例不再生成错误。 但是,如果KeyedCollection使用某些类型(例如接口)作为TItem ,则会生成以下错误: 你调用的对象是空的。 请考虑以下示例: namespace Test { public partial class MainWindow : Window { public […]

如何将列标题绑定到ViewModel中的属性? (WPF MVVM)

我有窗口,其中DataContext绑定到ViewModel对象(示例为VM1)。 VM1有很多属性,其中一个是名为“MyTitle”的字符串。 我在’Window \ Grid \ DataGrid’中有一个DataGridTextColumn。 如何将DataGridTextColumn中的属性“Header”绑定到VM1 ViewModel中的属性“MyTitle”? 谢谢!

Web应用程序中的LinqToSql静态DataContext

在我遇到的Web应用程序中,我发现以下代码在处理LinqToSQL时处理DataContext public partial class DbDataContext { public static DbDataContext DB { get { if (HttpContext.Current.Items[“DB”] == null) HttpContext.Current.Items[“DB”] = new DbDataContext(); return (DbDataContext)HttpContext.Current.Items[“DB”]; } } } 然后在以后执行此操作: DbDataContext.DB.Accounts.Single(a => a.accountId == accountId).guid = newGuid; DbDataContext.DB.SubmitChanges(); 在处理LinqToSQL时,我一直在研究最佳实践。 我不确定在处理DataContext不是ThreadSafe并保留它的静态副本时,这个方法已采取的方法。 这是一个很好的方法来接受Web应用程序吗? @ Longhorn213 – 基于你所说的内容,我读到的HttpContext就越多,我认为你是对的。 但是在我inheritance的应用程序中,这让人感到困惑,因为在每个方法的开头,他们都在重新查询数据库以获取信息,然后修改datacontext的实例并在其上提交更改。 从这一点来看,我认为应该不鼓励使用这种方法,因为它给人的错误印象是datacontext是静态的并且在请求之间保持不变。 如果未来的开发人员认为在方法开始时重新查询数据是因为他们认为数据已经存在,那么他们可能遇到问题而不理解原因。 所以我想我的问题是,如果在未来的发展中不鼓励这种方法吗?