实体框架6代码首先尝试创建数据库的RDS

时间:2017-05-09 19:39:38

标签: c# sql-server entity-framework entity-framework-6 amazon-rds

我有一个现有的数据库,还有一些我希望使用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>

任何原因都会忽略我的数据库名称并尝试从头开始创建一个新名称?

1 个答案:

答案 0 :(得分:1)

所以我想出来了......

解决方案(至少在我的情况下)是我的app.config文件中有两个连接字符串。

我在<connectionsStrings>部分有一个,<parameters>部分有另一个(见上文)。

有一次,我甚至评论了<connectionStrings>中的那个,因为另一个看起来更像是一个实体框架版本。

事实证明,我遵循了我在其他几个答案中找到的有关在DbContext文件中设置空类并将其硬编码为<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服务器权限。