Проблемы с первой установкой кода 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);
}
}