4

.NET v3.5 プロジェクトで Npgsql 2.0.11 で LINQ を使用しようとしています。データ テーブルから最初の単純なクエリを実行しようとしていますが、Postgresql に送信される構文が Pgsql 構文ではなく SQL Server 構文であるため、サーバーが構文エラーをスローすることがわかりました。

ドキュメントで提案されているように、プロジェクトの App.config にファクトリ生成を追加しました。 <system.data>

<DbProviderFactories>

<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.11.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>

</DbProviderFactories>

</system.data>

ここにスニペットがあります:

DbProviderFactory factory = DbProviderFactories.GetFactory("Npgsql");
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = "Server=mydbhost.example.com;UserId=postgres;Database=postgres";
table = new DataContext(connection).GetTable<Project.Model.MyEntity>();

factoryはNpgsql.NpgsqlFactoryのインスタンスであり (正しいようです)、connectionは Npgsql.NpgsqlConnection のインスタンスであることがわかりました。それはすべて良さそうです。ただし、GetTable を実行しようとすると、生成された SQL 構文に角かっこやその他のさまざまな SQL Server 固有の構文が含まれています。

何が欠けている可能性がありますか?

4

2 に答える 2

2

DataContext

DataContext は LinqToSql です。LinqToSql は SqlServer 専用です。

おそらく、LinqToEntities と ObjectContext を使用するつもりでしたか?

于 2011-01-25T02:47:43.580 に答える
0

Microsoft SQL Server 以外の RDBMS で LINQ to SQL を使用する場合は、サード パーティのアセンブリが必要です。DBLinq は、他の (オープンソース) データベースに LINQ to SQL 機能を提供するプロジェクトです。

http://code.google.com/p/dblinq2007/

Npgsql は、この Npgsql ブログのドキュメントに従って、Entity Framework の db プロバイダーとして構成できます。

http://npgsql.com/index.php/2009/08/how-to-set-up-entity-framework-npgsql-part-1/

于 2011-01-25T18:02:57.820 に答える