سؤال

أحاول اختبار عمليات ترحيل Entity Framework 6 باستخدام Npgsql 2.0.14.3 لإكمال دعم مكتبة PostgreSqlMigrationSqlGenerator مفتوحة المصدر التي تسمح باستخدام EF Migrations مع Postgresql.

فئة الاختبار التي أكتبها هي هذا (انقر هنا للحصول على صفحة جيثب):

using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;
using System.Data.Entity;
using System.Data.Entity.Migrations.Sql;
using Npgsql;
using NUnit.Framework;

namespace EntityFramework.PostgreSql.Test.IntegrationTests
{

    [TestFixture]
    public class PostgreSqlMigrationSqlGeneretorHistoryTest
    {

        private const string ConnectionString = "Server=127.0.0.1;Port=5432;Database=testEF6;User Id=postgres;Password=p0o9i8u7y6;CommandTimeout=20;Preload Reader = true;";
        private const string ProviderName = "Npgsql";


        [Test]
        public void GenerateInsertHistoryOperation()
        {


            var migrator = new DbMigrator(new LocalMigrationConfiguration());

            migrator.Update();


        }

        public class LocalMigrationConfiguration : DbMigrationsConfiguration<LocalPgContext>
        {
            public LocalMigrationConfiguration()
            {
                AutomaticMigrationDataLossAllowed = true;
                AutomaticMigrationsEnabled = false;
                SetSqlGenerator("Npgsql", new PostgreSqlMigrationSqlGenerator());
                MigrationsNamespace = "EntityFramework.PostgreSql.Test.IntegrationTests.Migrations";
                MigrationsAssembly = typeof (LocalPgContext).Assembly;
                TargetDatabase = new DbConnectionInfo(ConnectionString, ProviderName);
            }
        }

        public class LocalPgContext : DbContext//, IDbProviderFactoryResolver, IDbConnectionFactory
        {/*
            public DbProviderFactory ResolveProviderFactory(DbConnection connection)
            {
                return DbProviderFactories.GetFactory("Npgsql");
            }

            public DbConnection CreateConnection(string nameOrConnectionString)
            {
                return new NpgsqlConnection(nameOrConnectionString);
            }*/
        }
        /*
        public class LocalConfiguration : DbConfiguration
        {
            public LocalConfiguration()
            {

                // can't set this cos NpgsqlServices is internal
                SetProviderServices(
                    "Npgsql", provider: NpgsqlServices.Instance
                    );
            }

        }
        */
    }
}

طريقة الاختبار GenerateInsertHistoryOperation لا تتم التهيئة لأنها تُرجع هذا الخطأ:

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code

Additional information:
The 'Instance' member of the Entity Framework provider type 'Npgsql.NpgsqlServices, Npgsql, Version=2.0.14.3, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' did not return an object that inherits from 'System.Data.Entity.Core.Common.DbProviderServices'.
Entity Framework providers must inherit from this class and the 'Instance' member must return the singleton instance of the provider.
This may be because the provider does not support Entity Framework 6 or later; see http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

لقد أضفت ملف App.confing لتعيين الموفر (رابط جيثب):

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false" />
  </configSections>
  <entityFramework>
    <providers>
      <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql" />
    </providers>
  </entityFramework>
</configuration>

في هذه المرحلة، لا أعرف ما إذا كان Npgsql 2.0.14.3 لا يزال يدعم EF6 أو إذا كنت أفتقد شيئًا ما في الكود الخاص بي.

انقر هنا لمشاهدته على جيثب

شكرًا.

هل كانت مفيدة؟

المحلول

أرغب في رؤية المشروع المكتمل لأن عمليات ترحيل PostgreSQL ستكون مفيدة جدًا في مشروعي الأخير والذي يستخدم للأسف EF 6.

أعتقد أن إصدار npgsql الذي تحتاجه هو أحدث إصدار تجريبي، حاول استخدام هذا السطر في مدير الحزم لتثبيت إصدار EF 6 من npgsql

Install-Package Npgsql.EF6 -Pre
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top