7

私が得ている最新のエラーは

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

しかし、これは以前の何かが適切に設定されていないためだと確信しています。

私は現在、Npgsql 2.0.12 を使用するために最初にエンティティ フレームワーク 4.4 コードをセットアップしようとしています。

  • .net 2.0.50727 の machine.config を次のように更新しました。

    < add name="Npgsql Data Provider" 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 class Animal { [キー] public int Id { get; 設定; } パブリック文字列の名前 { get; 設定; } 公開文字列 説明 { get; 設定; } public int 年齢 { get; 設定; } public int NoOfLegs { get; 設定; } }

  • 他のすべては、コンテキストの既製の一般的な設定です

私が間違っていること、ヒント、またはチュートリアルに関するヘルプは、何でも役に立ちます。これはほんの少しの概念実証に過ぎませんでしたが、動作させてもかまいません。

Ps コードの書式設定の不適切な使用について申し訳ありません。正しく書式設定されていても、スタック交換により、何らかの理由で適切に使用できません。

4

2 に答える 2

16

Npgsql はスキーマの作成をサポートしていないため、db を手動で作成する必要があります。次に、このエラーを回避するには、コードのどこかに次のステートメントを追加します (この場合、Main() 関数の先頭にある可能性があります)。

Database.SetInitializer<DataContext>(null);

DataContext の代わりに、DbContext 実装を使用します。

于 2013-04-30T13:15:55.650 に答える
7

iwanekによる以前の回答に同意します。もう少し具体的に言うと、ステートメントを OnModelCreating オーバーライド メソッドに配置して、コンテキストの作成時に常に呼び出されるようにします。

    public class MyDbContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer<MyDbContext>(null);
        }
    }
于 2013-12-19T02:53:38.393 に答える