0

私の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=&quot;UserID=aUser;Password=aPassword;DataSourceName=Test&quot;" 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 属性を使用します。

ありがとう。

4

1 に答える 1

0

すべてが機能しましたが、考えられる唯一の理由は、ASP .NET 4.0 一時ファイルを削除したことです。また、統合テストを使用してこの部分をテストするプロセスから、単体テストを使用するプロセスに変更したことを付け加える必要があります。ビルド サーバーにはデータベースがないため、最初に単体テストを実行しませんでした。

そこで機能していることを証明できたら、一時ファイルを削除することにしました。その後、すべてが正常に機能するようになりました。そのため、アプリケーションで何らかのキャッシュの問題が発生していました。上記と同じconnectionStringを使用しました。

実際には、*/MyEntities.csdl ではなく、メタデータのドメイン名 "metadata=res://MyDomain/MyEntitities.csdl" を使用しました。当分の間、ドメインを変更する予定はありません。実際、EF が存在する MyEntities.Domain の場所、名前、および名前空間を変更したため、これが問題の一部を引き起こした可能性があります。

于 2012-12-06T21:07:11.880 に答える