EF6 + PostgreSQL
Похоже, что меня пора списывать в утиль...
Все находится в процессе миграции с Оракла 10 на Постгрее 10.3.
Базы - совершенно другие. Т.е. вероятности обойтись правкой СКЛ - ноль.
По сему - решил за одно соскочить со старой имплементации отчетов и перейти на Ентити.
Имею следующее:
Вин7 х64 СП1.
МС Студио 2015 Ент СП3. Вторая Студия 2017 - не используется.
Есть МС СКЛ, Оракле. Постгрее - на другой машине, ставить - не хочу - и так тяжело.
Часть 1. Драйвера/Провайдеры
Бесплатных драйверов/провайдеров для Постгрее - 1 штука - Npgsql..
Слито и проинсталенно для Студии как адд-он.
Повторная установка - не проходит - пишется все тип-топ.
Часть 2. Подключения.
Подключения - тестировались и вроде работали. Надо будет перепроверить версию Npgsql.
с которой это делалось.
Кроме этого подключения записаны/запомнены в дбФорге студии для Постгрее и там вполне работоспособны.
Часть 3. ОДБЦ.
Хренова биллина фича не показывает ни одного драйвера способного поддерживать коннект к Постгрее.
Была траил-версия от дбФорге - проэкспаирилась. Версия от Нпгскл - не видна,.
Часть 4. Коннект из Студии.
Тут полный облом. Законнектится из Студии к Постгрее у меня не получается.
Никак.
Смотрел ехтентионы для Студии, смотрел варианты установки Нпгскл - базу студия не видит.
Часть 5. Проекты.
Делается обычный проект дллки на базе фрэймворка 4.5.
В проект добавляются пакаджи:
<package id="EntityFramework" version="6.2.0" targetFramework="net45" /><package id="EntityFramework6.Npgsql" version="3.2.0" targetFramework="net45" /><package id="Npgsql" version="4.0.3" targetFramework="net45" /><package id="System.Runtime.CompilerServices.Unsafe" version="4.5.0" targetFramework="net45" /><package id="System.Threading.Tasks.Extensions" version="4.5.0" targetFramework="net45" /><package id="System.ValueTuple" version="4.5.0" targetFramework="net45" />
После добавления - вроде все ссылки разрешаются.
Часть 6. Тесты.
Ручками прописана пара юнитов под таблицы и на них тестируется операционистика ЕФ6.
Сплошной файл.
Причем - непонятно почему пользуется КОРЕ - никаких ссылок на КОРЕ не делалось.
Test Name: TestMethod2Test FullName: TestNuGet.Tests.UnitTest1.TestMethod2Test Source: TestNuGet.Tests\UnitTest1.cs : line 26Test Outcome: FailedTest Duration: 0:00:16.5569137Result Message:Test method TestNuGet.Tests.UnitTest1.TestMethod2 threw exception:System.Data.Entity.Core.ProviderIncompatibleException:An error occurred accessing the database. This usually means that the connection to the database failed.Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file.See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections.See the inner exception for details of the failure. ---> System.Data.Entity.Core.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.IO.FileLoadException: Could not load file or assembly 'Npgsql, Version=4.0.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
В общем - непонятно.
Может версии пакаджей надо другие? Но нигде не нашел ссылок в которых бы описали какие нужны.
В общем - головная боль - проще самому написать генератор ентитей, чем заставить это чудо работать...
ты как мой коллега, ему выдаёт ошибку FileNotFoundException, он не знает, что делать.
Вангую на то, что при компиляции твоего проекта с тестами не копируется автоматом Npgsql.dll
Скопируй его из проекта, где у тебя находится DBcontext от Entity Framework
Скопируй его из проекта
-----
Вообще-то - запихнуты в GAC.
ты как мой коллега
-----
Вообще-то, Я просто в конце рабочего дня записал проблемы которые надо решать. Список дел на завтра. Даже не смотрел что там.
Но либа в ГАКе не находится. В инете есть рекомендации покласть ее в папку сецдллок Студии. Надо подумать над этим.
И - да - проблема была в ненаходимости либы. Решилась - копированием... хотя это и не правильно - должна браться из GAC.
Тепрь надо думать над тем, почему при простом выборе по первичному ключу выпадает ошибка по неправильной реляции. Это при том, что в схеме - одна единственная таблица и нет реляций. Но это опять завтра.
Точнее сделать можно, но или запросы будто генерироваться не самые лучшие
-----
Блин, знал бы кто как мало меня сейчас беспокит качество запросов.
Мне бы хоть как-то вынуть бизнес-логику и ДАЛ из ГУЯ... и заменить ДАЛ ОРМом. Только-только чтобы у меня имелся ОДИН вариант обьекта Заказ и он работал во всех 20-30 приложениях. А то на сегодня - переработано где-то 10-15% кода - вариаций этих Заказов штук 80-т... и в каждом - своя система рассчетов... и они - не совместимы и не заменяемы. А запросы... запросы можно ковырять когда за остальным кодом следить не надо...
Блин, да как же это делается то?
Есть база ПостгреСкл.
Есть настроенные ОДБЦ соединения для х64 и х32 с ПостгреСкл базой.
Есть Нпгскл, Нпгскл.ЕнтитиФрамеворк.
Есть биллина поделка ЕФ6.
есть описание для Оракла https://csharp.today/entity-framework-6-database-first-wit... - сделано все тоже самое, но для ПостгреСкл.
Как заставить Студию использовать ОДБЦ соединение или Постгрее-драйвер для построения модели?
В самой студии соединение создается и работает. Осталось только заставить строить модель. Блин, никак - только МС СКЛ...