Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用Entity Framework Migrations 4.3时如何显式命名数据库_Entity Framework_Entity Framework Migrations - Fatal编程技术网

Entity framework 使用Entity Framework Migrations 4.3时如何显式命名数据库

Entity framework 使用Entity Framework Migrations 4.3时如何显式命名数据库,entity-framework,entity-framework-migrations,Entity Framework,Entity Framework Migrations,我最近开始使用Entity Framework迁移,并注意到当我运行Update database命令时,数据库名称对我来说并没有起作用 我的连接字符串是: <connectionStrings> <add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlCli

我最近开始使用Entity Framework迁移,并注意到当我运行
Update database
命令时,数据库名称对我来说并没有起作用

我的连接字符串是:

<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
这将创建另一个新的数据库,迁移将始终继续使用该数据库。我不介意输入StartUpProjectName命令,但是有没有办法覆盖它生成的数据库的默认名称?它总是按照以下方式创建数据库:

TestDB.Data.DataContext
是否有办法确保在传递StartUpProject名称时创建的数据库仅称为TestDB,或者这是使用StartUpProjectName设置的限制

请注意,我认为我需要指定StartUpProjectName的原因是我有一个多层项目设置。迁移配置文件在我的“数据”项目中,实体/模型在我的“域”项目中,等等。我目前在Global.asax.cs文件中没有任何初始化选项,就像我以前在code first ef 4.2中使用的那样。所以在我的项目中,我的数据项目中有一个DataContext,该项目中也有迁移配置

编辑:

由于我最初设置了这个问题,我偶然发现了在多项目解决方案中命名数据库的“正确”方法。虽然下面的答案会起作用,但这确实意味着您正在另一个领域复制web.config,这不是一个理想的解决方案。相反,您可以通过如下操作将名称放入DbContext(DataContext就是我在项目中使用的名称):

公共类DataContext:DbContext
{
public DataContext():base(“DatabaseNameHere”)
{ }
公共数据库集表1{get;set;}
公共数据库集表2{get;set;}
公共虚拟无效提交()
{
base.SaveChanges();
}
}
谢谢


Rich

执行
更新数据库时,应指定包含迁移的项目。确保该项目中有一个包含正确连接字符串的
app.config
文件

将应用程序拆分为多个项目时,运行应用程序时使用的连接字符串是启动的项目之一。迁移时,使用的连接字符串是包含迁移的项目的连接字符串


当我进行类似的设置时,我必须在两个地方添加连接字符串。有点尴尬,但它可以工作。

您可以通过将其作为参数提供来避免在app.config中对其进行管理:

Update-Database -Verbose 
 -ConnectionString "CONNECTIONSTRING" 
 -ConnectionProviderName "System.Data.SqlClient"
 -StartupProjectName WEBSITE_PROJECT -ProjectName MIGRATION_PROJECT
如果你喜欢无休止地打字,那就简单多了。

我用Nuget最新的EF5试过了。 但是,
updatedatabase
不会从包含迁移的项目中读取
App.config
(就像一年前的答案一样),但它只会从启动项目中读取
*.config
。这很好,但我发现了
添加迁移
更新数据库
如何在此处找到合适的连接字符串:

  • 它正在尝试首先获取“DefaultConnection”连接字符串
  • 然后,它尝试根据上下文类名获取连接字符串名称。例如,我有从
    DbContext
    派生的
    MyContext
    类,因此我可以使用“MyContext”连接字符串名称。当我有多个db连接时很有用
  • 如果未找到上述两个连接字符串名称,则它将失败,并且不显示“DefaultConnection”连接字符串,除非您提供
    -ConnectionStringName
    参数。请参阅
    get help Update Database
    ,以查看Package Manager控制台中的帮助页面
  • 没有重试或回退尝试,因此如果“DefaultConnection”包含错误的连接字符串,它只会显示错误

    如果连接字符串中同时存在DefaultConnection和上下文名称,则DefaultConnection将优先


    我更希望#2成为第一次尝试,因为名称更具体,但上面的步骤是EF5迁移在尝试连接到db时所做的。

    您可以将连接字符串存储在网站项目的web.config中,将DBContext和迁移文件存储在另一个项目中,并且仍然共享相同的连接字符串。但是,除了将数据项目(或其中包含DBContext等的任何项目)设置为Package Manager控制台的默认项目外,还需要确保将网站设置为默认启动项目


    我在任何地方都看不到这方面的文档,但24小时的疯狂工作使我无法理解为什么我的迁移突然被应用到SQLExpress db,从而得出了这个结论。

    刚刚测试了这一点,它成功了!谢谢你的建议-我永远不会想到把连接字符串放在另一个项目中!再次感谢:)我将连接字符串放在一个单独的连接字符串文件中,该文件在web项目中引用。然后,我从我的另一个项目链接到该连接字符串文件,这样可以避免在项目之间复制连接字符串。看起来包管理器控制台忽略了Visual Studio中的当前生成配置。这是预期的行为吗?我对选择正确的连接字符串非常感兴趣,但项目本身可能还有其他不同之处。软件包管理器控制台如何决定选择哪个exe/dll?感谢您编辑的答案..帮助了我很多..此外,我发现这篇文章很有帮助。我遇到了同样的问题,发现迁移在启动项目中使用了一个连接字符串,并且连接字符串的名称与上下文的名称相同。这真的很奇怪。它总是从启动项目配置文件中读取connectionString。如果找不到,则使用DbContext名称创建数据库。如果找不到“System.Data.SqlClient”,该怎么办
    public class DataContext : DbContext
    {
        public DataContext() : base("DatabaseNameHere")
        { }
    
        public DbSet<Table1> Table1 { get; set; }
        public DbSet<Table2> Table2 { get; set; }
    
        public virtual void Commit()
        {
            base.SaveChanges();
        }
    }
    
    Update-Database -Verbose 
     -ConnectionString "CONNECTIONSTRING" 
     -ConnectionProviderName "System.Data.SqlClient"
     -StartupProjectName WEBSITE_PROJECT -ProjectName MIGRATION_PROJECT