Entity Framework 6 Code First 到 RDS 尝试创建数据库
Entity Framework 6 Code First to RDS trying to Create Database
我有一个现有的数据库以及一些我想使用 Entity Framework (v6.0.0.0) 推送到该数据库的现有代码。
我在连接到数据库时没有问题,我已经检查了上下文和迁移文件,对我来说都很好。
当我 运行 Update-Database -Verbose
命令时,出现以下错误:
CREATE DATABASE permission denied in database 'master'.
我不清楚它为什么要尝试创建一个数据库,b/c一个已经存在,我在设置中指定了数据库。
这是我的 app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxx" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Server=[xxxxxxxxxx].rds.amazonaws.com,1433;Database=[xxxxxxxxxx];UID=[xxxxxxxxxx];PWD=[xxxxxxxxxx]" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="DataModel" connectionString="Server=[xxxxxxxxxx].rds.amazonaws.com,1433;Database=[xxxxxxxxxx];UID=[xxxxxxxxxx];PWD=[xxxxxxxxxx]"/>
</connectionStrings>
</configuration>
为什么它会忽略我的数据库名称并尝试从头开始创建一个新数据库?
所以我想通了...
解决方案(至少在我的情况下)是我的 app.config 文件中有两个连接字符串。
我在 <connectionsStrings>
部分有一个,另一个在 <parameters>
部分(见上文)。
有一次我什至注释掉了 <connectionStrings>
中的那个,因为另一个看起来更像是 Entity Framework 版本。
事实证明,我遵循了在其他一些答案中找到的关于在 DbContext
文件中设置空 class 并将其硬编码为<connectionStrings>
节。
像这样:
public class YourContext : DbContext
{
public YourContext() : base("name=DefaultConnection")
{
}
public DbSet<aaaa> Aaaas { get; set; }
}
我这样做之后,出现了以下错误:
The connection string 'DataModel' in the application's configuration file does not contain the required providerName attribute."
因此,我将 connectionStrings
更改为如下所示:
<connectionStrings>
<add name="DataModel" connectionString="Server=[xxxxxxxxxx].rds.amazonaws.com,1433;Database=[xxxxxxxxxx];UID=[xxxxxxxxxx];PWD=[xxxxxxxxxx]" providerName="System.Data.SqlClient" />
</connectionStrings>
之后,我收到以下错误:
CREATE TABLE permission denied in database '[xxxxxxxxx]'.
所以我回到数据库并为相关数据库添加了 db_ddladmin
数据库角色。
之后,我 运行 Update-Database
成功了!
当然,我回去删除了 db__ddladmin
权限和 View any database
服务器权限。
我有一个现有的数据库以及一些我想使用 Entity Framework (v6.0.0.0) 推送到该数据库的现有代码。
我在连接到数据库时没有问题,我已经检查了上下文和迁移文件,对我来说都很好。
当我 运行 Update-Database -Verbose
命令时,出现以下错误:
CREATE DATABASE permission denied in database 'master'.
我不清楚它为什么要尝试创建一个数据库,b/c一个已经存在,我在设置中指定了数据库。
这是我的 app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxx" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Server=[xxxxxxxxxx].rds.amazonaws.com,1433;Database=[xxxxxxxxxx];UID=[xxxxxxxxxx];PWD=[xxxxxxxxxx]" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="DataModel" connectionString="Server=[xxxxxxxxxx].rds.amazonaws.com,1433;Database=[xxxxxxxxxx];UID=[xxxxxxxxxx];PWD=[xxxxxxxxxx]"/>
</connectionStrings>
</configuration>
为什么它会忽略我的数据库名称并尝试从头开始创建一个新数据库?
所以我想通了...
解决方案(至少在我的情况下)是我的 app.config 文件中有两个连接字符串。
我在 <connectionsStrings>
部分有一个,另一个在 <parameters>
部分(见上文)。
有一次我什至注释掉了 <connectionStrings>
中的那个,因为另一个看起来更像是 Entity Framework 版本。
事实证明,我遵循了在其他一些答案中找到的关于在 DbContext
文件中设置空 class 并将其硬编码为<connectionStrings>
节。
像这样:
public class YourContext : DbContext
{
public YourContext() : base("name=DefaultConnection")
{
}
public DbSet<aaaa> Aaaas { get; set; }
}
我这样做之后,出现了以下错误:
The connection string 'DataModel' in the application's configuration file does not contain the required providerName attribute."
因此,我将 connectionStrings
更改为如下所示:
<connectionStrings>
<add name="DataModel" connectionString="Server=[xxxxxxxxxx].rds.amazonaws.com,1433;Database=[xxxxxxxxxx];UID=[xxxxxxxxxx];PWD=[xxxxxxxxxx]" providerName="System.Data.SqlClient" />
</connectionStrings>
之后,我收到以下错误:
CREATE TABLE permission denied in database '[xxxxxxxxx]'.
所以我回到数据库并为相关数据库添加了 db_ddladmin
数据库角色。
之后,我 运行 Update-Database
成功了!
当然,我回去删除了 db__ddladmin
权限和 View any database
服务器权限。