Проблемы с первой установкой кода npgsql и Entity Framework

Самая последняя ошибка, которую я получаю:

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

но я убежден, что это только потому, что что-то ранее не было правильно настроено.

В настоящее время я пытаюсь настроить код Entity Framework 4.4 в первую очередь для использования Npgsql 2.0.12, я сделал следующее, и, кажется, по крайней мере сейчас подключаюсь к базе данных, но выдаю мне вышеуказанную ошибку, когда я делаю context.saveChanges();

  • Обновлен machine.config для.net 2.0.50727 с;

  • Добавил 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>
    
  • Передача данных выглядит следующим образом

    открытый класс Animal { [Key] public int Id { get; задавать; } публичная строка Name { get; задавать; } публичная строка Описание {get; задавать; } public int Age { get; задавать; } public int NoOfLegs { get; задавать; } }

  • Все остальное общее с готовой обстановкой

Любая помощь в том, что я делаю неправильно или совет или учебники, что-нибудь будет полезно. Это было лишь маленьким доказательством концепции, но я не против заставить ее работать.

Извините за неправильное использование форматирования кода, обмен стека не позволит мне использовать его по какой-то причине, хотя он правильно отформатирован.

2 ответа

Решение

Npgsql не поддерживает создание схемы, поэтому вы должны создать БД вручную. Затем, чтобы избежать этой ошибки, добавьте эту инструкцию где-то в вашем коде (в вашем случае это может быть начало функции Main()):

Database.SetInitializer<DataContext>(null);

Вместо DataContext используйте вашу реализацию DbContext.

Я согласен с предыдущим ответом от iwanek. Чтобы быть более конкретным, мне нравится помещать инструкцию в метод переопределения OnModelCreating, чтобы он всегда вызывался при создании контекста.

    public class MyDbContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer<MyDbContext>(null);
        }
    }
Другие вопросы по тегам