3

現在、ASP.NET MVC プロジェクトを含むいくつかのサブプロジェクトを含む .NET ソリューションを開発中です。私のモデルは、ソリューション内の他のさまざまなプロジェクトから使用する必要があるため、別のアセンブリに分割されています。

私のモデルは、ADO.NET Entity Framework エンティティ モデルで構成されています。次のコードを使用して、モデルにシングルトン パターンを使用することにしました (SalsaEntities はエンティティ モデルの名前です)。

partial class SalsaEntities
{
    private static SalsaEntities _instance = new SalsaEntities();

    /// <summary>
    /// Singleton instance of SalsaEntities.
    /// </summary>
    public static SalsaEntities Instance
    {
        get
        {
            return _instance;
        }
    }
}

次に、他のアセンブリから SalsaEntities.Instance を使用します。これは、私が持っている 3 番目のプロジェクトである Windows サービスではうまく機能しますが、そのプロジェクトの App.Config ファイルに接続文字列を含める必要がありました。

ただし、ASP.NET MVC プロジェクトから SalsaEntities.Instance を使用しようとすると、例外が発生します。プロジェクトのルートとViewsディレクトリの両方にあるWeb.configファイルに以下を含めても...

<connectionStrings>
  <add name="SalsaEntities" connectionString="metadata=res://*/SalsaModel.csdl|res://*/SalsaModel.ssdl|res://*/SalsaModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=DbSalsa;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

...まだ次の例外がスローされています。

指定された名前付き接続が構成内に見つからないか、EntityClient プロバイダーでの使用が意図されていないか、無効です。

アセンブリにはすべて異なる名前空間がありますが、Windows サービスは問題なくアクセスするので、それは問題ではないと思います。

ヘルプ?

ありがとう、デビッド

PS: 私が気付いたもう 1 つの癖は、Visual Studio に新しい厳密に型指定されたビューを作成するように指示すると、モデル アセンブリに関するファイルが見つからないというエラーが生成されることです。このエラーが解決策なしで Web 上で数回議論されているのを見たことがあります。

4

2 に答える 2

3

ここで何が起こっているのかわかりませんが、Misha N が良い質問をします。

ただし、Singleton パターンを再考する必要があると思います (少なくとも MVC アプリの場合)。

時間の経過とともに、ObjectContext にはますます多くのオブジェクトが含まれるようになり、結果として速度が低下します。理由の詳細については、このヒントを参照してください。

アレックス

于 2009-11-10T03:05:38.703 に答える
1

シングルトン パターンは、ASP.NET ベースのアプリには適していません。ASP.NET 要求レベルで ObjectContext を管理するリポジトリ パターンなどに切り替える必要があります。これについて説明している記事がいくつかあります。

必要に応じて、ここから開始できます: http://www.ef-faq.org/objectcontext.html

それが役立つことを願っています..

于 2010-12-03T08:51:54.960 に答える