2016-04-23 2 views
3

Я пытаюсь создать классы C# для Linq (или Entity Framework 6) из существующей базы данных PostgreSql в Linux. Я установил npgsql и Entity Framework 6 в проект monodevelop, и я смог запросить базу данных с помощью чистого SQL.Создание классов linq с использованием sqlmetal для npgsql

Но когда я пытаюсь генерировать классы Linq с помощью SqlMetal:

sqlmetal -c "Port=5432;Encoding=UTF-8;Server=myDbServer;Database=MyDatabase;UserId=myUser;Password=mypassword;" --code=model.cs --language=c# --provider=PostgreSql 

Я получаю следующее сообщение об ошибке:

sqlmetal: Could not load databaseConnectionType type 'npgsql'. Try using the --with-dbconnection=TYPE option.

Я не знаю, что поставить после --with-DBConnection

+1

Это очень специфичный для SqlMetal вопрос - я не знаю об этом (вы, вероятно, захотите пометить этот вопрос для него). Если вам то, что вам нужно, это имя класса для типа DbConnection, то это Npgsql.NpgsqlConnection. Для чего-то еще вам нужно будет предоставить более подробную информацию о SqlMetal. –

+0

Я пробовал альтернативный путь, сгенерировал модель под визуальной студией и копировал выходные файлы в MonoDevelop/Linux, она компилируется, но я борюсь за передачу строки подключения Entity Framework. –

ответ

2

В настоящее время драйвер Npgsql не распространяется вместе с Mono (http://www.mono-project.com/docs/about-mono/releases/4.0.0/). Есть несколько возможностей для решения этой проблемы:

  1. Установите Npgsql.dll в GAC. Для этого вам необходимо использовать команду:

    sudo gacutil -i Npgsql.dll
    Npgsql.dll можно получить здесь: https://github.com/npgsql/npgsql/releases/download/v2.2.5/Npgsql-2.2.5-net45.zip. (Версия 2.2.5.0 приведена в качестве примера, также может использоваться другая версия (например, v3)). После этого вы можете попытаться перезапустить sqlmetal
    sqlmetal -c "Port=5432;Encoding=UTF-8;Server=myDbServer;Database=MyDatabase;UserId=myUser;Password=mypassword;" --code=model.cs --language=c# --provider=PostgreSql --with-dbconnection="Npgsql.NpgsqlConnection, Npgsql, Version=2.2.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" 
    

  2. Загрузите файл Npgsql.dll в какую-то папку и добавьте эту папку в env переменную MONO_PATH. Например, поместите Npgsql.dll в/usr/local/lib/mono-дополнительные-сборки, а затем

    set MONO_PATH=$MONO_PATH:/usr/local/lib/mono-additional-assemblies
    После этого перезапустите sqlmetal без --with-dbconnection. Должно сработать.

+0

Работает, но мне пришлось скопировать файл Npgsql.dll с моей машины Windows, чтобы соответствовать версии 3.0.5 –

Смежные вопросы