c# - npgsql 和 Entity Framework 代码首先设置问题

标签 c# entity-framework ef-code-first npgsql

我得到的最新错误是

ERROR: 42P01: relation "dbo.__MigrationHistory" does not exist

但我确信这只是因为之前的某些设置不正确。

我目前正在尝试首先设置 Entity Framework 4.4 代码以使用 Npgsql 2.0.12,我已经完成了以下操作并且现在似乎至少可以连接到数据库但是当我执行 context.saveChanges( );

  • 为 .net 2.0.50727 更新了 machine.config;

    < 添加名称="Npgsql 数据提供者"invariant="Npgsql"support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>

  • 将dll添加到项目中

  • 将 app.config 更改为如下所示;

    <configuration>
      <configSections>
        <section name="entityFramework"
          type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
          EntityFramework, 
          Version=4.4.0.0, Culture=neutral, 
          PublicKeyToken=b77a5c561934e089" 
          requirePermission="false" />
      </configSections>
      <system.data>
        <DbProviderFactories>
          <remove invariant="Npgsql"></remove>
          <add name="Npgsql Data Provider" 
               invariant="Npgsql" 
               description=".Net Framework Data Provider for Postgresql Server" 
               type="Npgsql.NpgsqlFactory, Npgsql, 
                     Version=2.0.12.0, Culture=neutral, 
                     PublicKeyToken=5d8b90d52f46fda7" />
        </DbProviderFactories>
      </system.data>
      <connectionStrings>
        <add name="DataContext" 
             connectionString="Server=127.0.0.1;Port=5432;Database=postgres;User Id=postgres;Password=*******;CommandTimeout=20;" 
             providerName="Npgsql" />
      </connectionStrings>
    </configuration>
    
  • 传入的数据如下所示

    公共(public)类动物 { [ key ] 公共(public) int Id { 得到;放; } 公共(public)字符串名称 { 得到;放; } 公共(public)字符串描述 { 得到;放; } 公共(public) int 年龄 { 得到;放; } public int NoOfLegs { 得到;放; }

  • 其他一切都是通用的现成上下文设置

任何关于我做错了什么的帮助或提示或教程,任何事情都会有所帮助。这只是一点概念证明,但我不介意让它发挥作用。

附言抱歉代码格式使用不当,即使格式正确,堆栈交换也不会因为某种原因让我正确使用它。

最佳答案

Npgsql 不支持模式创建,因此您必须手动创建数据库。 然后为避免此错误,请在代码中的某处添加此语句(在您的情况下,它可能位于 Main() 函数的开头):

Database.SetInitializer<DataContext>(null);

使用您的 DbContext 实现代替 DataContext。

关于c# - npgsql 和 Entity Framework 代码首先设置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12545228/

相关文章:

c# - Entity Framework 6 更新表并插入外键相关表

C# Entity Framework 延迟加载未加载

entity-framework - 指定的表不存在。 [ __MigrationHistory ]

c# - 将许多相似的参数封装到结构中是一种好习惯吗

c# - 覆盖类字段的 ToString() 方法

c# - LINQ 连接查询(表之间可以为空的引用)

rest - ASP.NET Web API 设计的最佳实践?

c# - 如何在 ASP.NET MVC 2 中预先选择单选按钮?

c# - Autofac 用具体类型注册泛型实例

entity-framework - Code First 迁移在 localdb 上更新了错误的 Db