我要尝试解释这一点,而不是真正地通过我正在工作的应用程序的整个设计。因为谁在乎这一点。如果相关,我可以提供更多细节,但我认为我涵盖了以下所有内容。并发问题使用DbContext.Database.Connection.CreateCommand
主要问题:
我已经得到了我需要定期执行一些存储过程。我从数据库表中获取proc名称,所以我的应用程序没有硬编码知识。这是设计。我目前正在使用实体框架来完成我所有的数据访问。我的应用程序是多线程的 - 我抓住所有需要运行的过程,然后遍历每个过程,从我的配置表中获取它的属性,并将它排队以在应用程序的线程池中的单独线程上运行。
我正在使用Database.Connection.CreateCommand方法并执行procs - 将数据拉入数据表。当我只执行一个proc时,这可以很好地工作,但是当我遇到并发问题时。我得到具体的例外是
System.Data.SqlClient.SqlException: 新的事物是不允许的,因为 有在 会话中运行其他线程。
我假设这是因为我试图执行我的程序,同时也通过实体框架访问另一个过程的属性。
潜在的解决方案/发生在我思绪的列车:
我能得到这个蛮好用DbContext.Database.SqlQuery方法的工作,如果我写一个模型类,有我需要的领域。但是如果我根本不想写一个模型课呢?有没有一种方法可以做到这一点,让实体框架实际处理查询?
我可以抓住所有的属性,然后开始执行任何特效。这可能会正常工作。如果我将属性定义为模型中的ICollections,它告诉我要运行的过程,当从数据库中选择所述模型时,是否有强制加载它们的方法,而不是稍后再遍历它们以读取它们?
创建一个新的连接听起来像个好主意。有什么我需要记住的吗?任何“不要杀死您的服务器”警告? {{im新数据库的东西}} – 2011-05-02 04:55:20