Подтвердить что ты не робот

Linq To Sql с PostgreSQL

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Я использую 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 я использую этот тип строки подключения: "Server = localhost; Database = MyDB; User Id = postgres; Password = MyPassword; DbLinqProvider = PostgreSql; DbLinqConnectionType = Npgsql.NpgsqlConnection, Npgsql, Version = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 5d8b90d52f46fda7"

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

Ответ 3

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

Другой вариант - ngpsql
ОБНОВЛЕНИЕ Библиотека npgsql переехала на Github, вот обновленная ссылка updated link

Ответ 4

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

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

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

PM> Install-Package linq2db.PostgreSQL

В результате вы получите папку с вашим решением: 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, класс будет *.tt. Хорошо работает для нашей компании из 21 разработчика.

Ответ 5

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

Ответ 6

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