【问题标题】:multiple localdb instances in separate files不同文件中的多个 localdb 实例
【发布时间】:2014-11-11 02:30:31
【问题描述】:

我试图在同一台机器上多次运行同一个项目,每个实例都需要它自己的不同 localdb 实例,存储在它自己的个人 mdf 文件中(这听起来可能很奇怪,但我有这样做的理由)。目前我正在尝试对不同的文件使用相同的连接字符串名称,但这不起作用。这是一个示例连接字符串:

<add name="dbContext"
     connectionString="Data Source=(LocalDb)\v11.0;AttachDbFileName=|DataDirectory|\db-<string-unique-to-project-instance-1>.mdf;Initial Catalog=dbContext;Persist Security Info=True;Trusted_Connection=False;" 
     providerName="System.Data.SqlClient" />

但是,在运行项目时,数据库文件并未按预期创建,即使对加载到内存中的连接字符串的询问显示正确的值。

什么连接字符串允许多个 localdb 实例/我还需要做些什么吗?

注意:我也尝试过使用不同的连接字符串名称,但无济于事。

【问题讨论】:

    标签: .net entity-framework entity-framework-migrations localdb


    【解决方案1】:

    所有这些数据库都是在同一个 LocalDB 实例中创建的,这意味着它们的名称会发生​​冲突。

    让我们使用您提供的连接字符串。

    所有数据库都在自动LocalDB实例v11.0中创建:

    Data Source=(LocalDb)\v11.0
    

    每个数据库都在一个单独的、唯一命名的文件中创建:

    AttachDbFileName=|DataDirectory|\db-<string-unique-to-project-instance-1>.mdf
    

    但它们都以相同的数据库名称附加到 LocalDB 实例:

    Initial Catalog=dbContext
    

    解决此问题的最简单方法是为每个数据库指定一个唯一名称,例如:

    Initial Catalog=dbContext-<string-unique-to-project-instance-1>
    

    您也可以尝试创建多个命名的 LocalDB 实例,每个项目一个,但除非您有充分的理由,否则我会在自动 LocalDB 实例中使用唯一的数据库名称。

    【讨论】:

    • 拥有单独的实例允许我单独停止/删除这些。有没有办法从实例中删除每个数据库并使用单个实例删除文件?
    • 嘿,它仍然是 SQL Server,所以 DROP DATABASE 应该可以解决问题 :-)
    • 是的,但是从命令行我可以运行“sqllocaldb.exe stop ”和“sqllocaldb.exe delete ”,然后删除文件,我又恢复了干净石板。我只是好奇这是否可以使用单个实例,所以我想知道是否有办法使用命令行中的 sqllocaldb.exe 工具删除数据库。
    • 或者换句话说,当我使用 localdb 时,sqllocaldb.exe 已经安装并可用,因此停止/删除无需额外努力。是否已经安装了另一个 cmd 工具来删除数据库,还是需要另一个安装?
    • 为什么不直接使用sqlcmd -Q 从命令行运行查询?喜欢:sqlcmd -S (localdb)\v11.0 -Q "select @@version"。我认为它是与 LocalDB 一起安装的,但请仔细检查。
    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多