Linq To Sql с PostgreSQL - PullRequest
       11

Linq To Sql с PostgreSQL

27 голосов
/ 31 января 2011

Можно ли использовать LinqToSql с PostgreSQL (желательно с Mono)?Можете ли вы порекомендовать какие-нибудь статьи, где это описано пошагово?

Ответы [ 6 ]

16 голосов
/ 08 декабря 2011

Я использую LINQ to SQL около 2 лет с базами данных MySQL и PostgreSQL (используя DbLinq в Windows, используя Mono в Linux и Mac OS X).

Таким образом, LINQ to SQL НЕ ограничивается SQL Server, но, как указано выше, вам необходимо использовать внешние библиотеки.

В Mono DbLinq является основой пространства имен System.Data.Linq: вам не нужно развертывать / регистрировать сборки DbLinq. То же самое для сборки Npgsql: она уже предоставляется в последних версиях Mono.

Вы должны знать, что поддержка неполная (у меня было множество проблем, когда я пытался связать элемент управления ObjectDataSource с контекстом данных PostgreSQL: я решил их, выполнив ручное связывание данных с сгенерированными сущностями). Но этого достаточно для большинства запросов SQL (у меня почти никогда не было неудачных запросов: сложные соединения можно моделировать несколькими более простыми запросами).

Существует небольшая разница между DbLinq и LINQ to SQL. Только строка подключения должна быть настроена путем предоставления информации о поставщике данных. Посмотрите эти короткие примеры (я не нашел ни одного реального руководства по использованию DbLinq):

http://www.mono -project.com / Release_Notes_Mono_2.6
http://www.jprl.com/Blog/archive/development/mono/2009/Mar-12.html

Лично в Mono 2.10.6 я использую строку подключения этого типа: «Сервер = localhost; База данных = MyDB; Идентификатор пользователя = postgres; Пароль = MyPassword; DbLinqProvider = PostgreSql; DbLinqConnectionType = Npgsql.NpgsqlConnection, NpgsqlConlction, Npgsql = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 5d8b90d52f46fda7 "

Примечание: в Mono инструмент DbMetal заменяется командой "sqlmetal", которая имеет те же параметры (это просто оболочка для DbMetal).

13 голосов
/ 31 января 2011

Не из коробки. Вам нужно будет найти стороннего поставщика, который написал провайдера для PostgreSQL.

Один из таких провайдеров - DbLinq . Инструкции по установке и использованию можно найти здесь .

Обратите внимание, что с 2016 года проект DbLinq перемещен в github , заархивирован и больше не поддерживается.

8 голосов
/ 31 января 2011

Существует сторонний поставщик Linq для postgres (а также MySql и других баз данных) здесь .

Другой вариант - ngpsql

5 голосов
/ 14 сентября 2016

Используйте LinqToDB для PostgreSQL

https://www.nuget.org/packages/linq2db.PostgreSQL/

В Visual Studio откройте консоль NuGet и выполните следующее:

PM> Install-Package linq2db.PostgreSQL

Youв итоге получится папка в вашем решении: LinqToDB.PostgreSQL.В папке есть файл с именем CopyMe.PostgreSQL.tt.txt.Прочтите в файле, что нужно сделать, чтобы сгенерировать класс Context.

Пример содержимого этого файла:

<#@ template language="C#" debug="True" hostSpecific="True"                            #>
<#@ output extension=".generated.cs"                                                   #>
<#@ include file="$(ProjectDir)LinqToDB.Templates\LinqToDB.PostgreSQL.Tools.ttinclude" #>
<#@ include file="$(ProjectDir)LinqToDB.Templates\PluralizationService.ttinclude"      #>
<#
    /*
        1. Copy this file to a folder where you would like to generate your data model,
           rename it, and delete .txt extension. For example:

            MyProject
                DataModels
                    MyDatabase.tt

        2. Modify the connection settings below to connect to your database.

        3. Add connection string to the web/app.config file:

            <connectionStrings>
                <add name="MyDatabase" connectionString="Server=MyServer;Port=5432;Database=MyDatabase;User Id=postgres;Password=TestPassword;Pooling=true;MinPoolSize=10;MaxPoolSize=100;Protocol=3;" providerName="PostgreSQL" />
            </connectionStrings>

        4. To access your database use the following code:

            using (var db = new MyDatabaseDB())
            {
                var q =
                    from c in db.Customers
                    select c;

                foreach (var c in q)
                    Console.WriteLine(c.ContactName);
            }

        5. See more at https://github.com/linq2db/t4models/blob/master/Templates/ReadMe.LinqToDB.md.
    */

    NamespaceName = "DataModels";

    LoadPostgreSQLMetadata("MyServer", "5432", "MyDatabase", "postgres", "TestPassword");
//    LoadPostgreSQLMetadata(string connectionString);

    GenerateModel();
#>

Каждый раз, когда вы сохраняете файл *.tt, класс будет обновляться.Хорошо работает для нашей компании из 21 разработчика.

4 голосов
/ 31 января 2011

Linq-to-SQL поддерживает только SQL Server. Entity Framework поддерживает и другие базы данных.

2 голосов
/ 18 февраля 2011

Нет, LINQ to SQL работает только с MS SQL Server.Для доступа к источнику данных PostgreSQL вы должны использовать стороннего поставщика.Я рекомендую вам попробовать Devart LinqConnect .Также этот продукт предоставляет некоторые возможности Entity Framework, например, - сложный тип, поддержка разностного типа наследования и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...