代码之家  ›  专栏  ›  技术社区  ›  Wouter

与本地SQL Express服务器并发的sqlconnection和entityconnection

  •  1
  • Wouter  · 技术社区  · 16 年前

    我的大部分数据库操作都使用Linq2Entity。但是,对于数据库创建、表创建和初始数据插入,我使用普通的SQL文件。因此,我需要一个SQLConnection和一个EntityConnection。不幸的是,实体框架开始抱怨SQL Server没有监听管道的另一端。

    我不确定这里的问题是什么,可能是由于用户实例。清除sqlconnection的池或处理连接实例没有帮助。

    我使用的连接字符串如下:

    “数据源=\sqlExpress;初始目录=dbname;集成安全性=sspi;”

    更新:

    我试图将EntityConnection用于数据库维护,但遇到了麻烦。我无法使用EntityConnection创建数据库和删除数据库。EntityConnection不支持以下语法,但对于到MS SQL Express的sqlconnection,它可以正常工作。

    CREATE DATABASE silverfit ON ( NAME = silverfit, FILENAME = 'c:\silverfit\silverfit.mdf' );
    

    出于某种原因,EntityConnection不允许我更改删除数据库所需的数据库。恐怕我仍然需要sqlconnection来创建数据库和表。

    对于本地MS SQL Express数据库,是否有一种方法可以使SQLConnections和EntityConnections共存?

    谢谢, 沃特

    5 回复  |  直到 16 年前
        1
  •  2
  •   jrista    16 年前

    是否尝试创建一个sqlConnection,然后将其传递给EntityConnection的构造函数?EntityConnection的其中一个重载采用metadataworkspace和dbconnection(sqlconnection是从中派生的)。这有一个轻微的缺点,即必须手动创建metadataworkspace,它收集定义工作区的.csdl、.ssdl和.msl文件。但是,从长远来看,您应该能够为执行DML查询和使用实体框架共享单个连接。

        2
  •  1
  •   Craig Stuntz    16 年前

    我不同意您需要一个简单的SQL连接和实体连接来完成这个任务,至少正如您所描述的那样。可以使用实体连接执行SQL。看 EntityConnection.CreateDbCommand .当然,在非特定于数据库服务器的实例(如EntityConnection)上执行特定于数据库服务器的操作存在危险。但在这种情况下,它可能比有一个单独的连接要好。

        3
  •  1
  •   Thomas Levesque    16 年前

    您是否尝试使用entityConnection.storeConnection来检索sqlconnection并使用它执行命令?

        4
  •  0
  •   Joseph    16 年前

    如果您试图在运行时将数据库文件附加到SQL Server Express,这看起来像是,那么一次只能打开一个连接。这对其他事情来说是个问题,而不仅仅是你想要完成的事情。例如,假设您通过vs中的服务器资源管理器连接到“c:\silverfit\silverfit.mdf”,并尝试打开db中的一个表。打开表后,尝试运行应用程序。它会爆炸的。

    但是,如果打开SQL Management Studio Express(可以下载它 here ,然后将数据库连接到SQL Server,您遇到的问题将消失。此时,您应该能够通过sqlconnection或entityconnection打开到数据库的多个连接。

    在运行时将数据库附加到SQL Server Express引擎实际上只在演示或概念证明方面工作良好。

        5
  •  0
  •   Jeremy McGee    16 年前

    ADO.NET是否通过连接池保持与数据库的连接?尝试将pooling=false添加到连接字符串,因为这样可以在删除数据库之前关闭它。