私のconnectionString構文がどのように間違っているのかわかりません。誰でもこれを理解する方法を提案できますか? 接続文字列で EF を使用するのに問題があります。私はEFが初めてです。
- Sybase Anywhere 12 データベースを使用しています。
- Web アプリケーションによって参照される別のクラス ライブラリで、EDMX と共に Table-First ObjectContext を使用しています。
- クラス ライブラリで Ninject モジュールを使用してリポジトリをバインドしています。
- 「Test」というODBC DataStoreを使用しています
- その他の情報 EF 4.3.1.0、.NET 4、VS2010
- 私のメイン Web アプリケーション web.config には、EF 接続文字列が次のようにコピーされています。
<connectionStrings>
<add name="Entities"connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl;provider=iAnywhere.Data.SQLAnywhere;provider connection string="UserID=aUser;Password=aPassword;DataSourceName=Test"" providerName="iAnywhere.Data.SQLAnywhere"/>
</connectionStrings>
リポジトリで Entity/ObjectContext を初期化すると (以下の using ステートメントを参照)、次のエラーが返されます。
using (var context = new Entities())
{
return {Linq to Entity here}
}
デバッガーで CLR 例外を有効にしたところ、.NET Framework でコードがエラーをスローすることがわかりました。
EntityConnection.cs
effectiveConnectionOptions = new DbConnectionOptions(setting.ConnectionString, EntityConnectionStringBuilder.Synonyms, false);
edmx デザイナーが生成:
/// <summary>
/// Initializes a new Entities object using the connection string found in the 'Entities' section of the application configuration file.
/// </summary>
public Entities() : base("name=Entities", "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
そこに自分の接続文字列が表示されるので、connectionString の解析に苦労しています。私は構文のさまざまな順列を試しましたが、次のようなものを受け入れるものは見つかりませんでした:
- ワイルドカードの代わりにエンティティ ファイルのアセンブリに明示的に名前を付ける (例: metadata=res://MyDomain/MyEntities.csdl...)
- UserID の代わりに UID、Password の代わりに PWD、DataSourceName の代わりに DBN など、Sybase に適した ODBC 属性を使用します。
ありがとう。