3

我目前正在开发一个 .NET 解决方案,其中涉及多个子项目,包括一个 ASP.NET MVC 项目。我的模型已被分离到一个单独的程序集中,因为我需要从解决方案中的各种其他项目中使用它。

我的模型由 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。这在我拥有的第三个项目(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:我注意到的另一个怪癖是,当告诉 Visual Studio 创建一个新的强类型视图时,它会生成一个关于模型装配的文件未找到错误。我已经看到这个错误在网上讨论了几次,但没有解决方案。

4

2 回答 2

3

我不确定这里发生了什么,但 Misha N 提出了一个很好的问题。

但是我真的认为你应该重新考虑单例模式(至少对于 MVC 应用程序)。

随着时间的推移,您的 ObjectContext 将包含越来越多的对象,因此会变慢。有关原因的更多信息,请参阅此提示

亚历克斯

于 2009-11-10T03:05:38.703 回答
1

单例模式不适用于基于 ASP.NET 的应用程序,您需要切换到类似 Repository 模式的模式,从而在 ASP.NET 请求级别管理 ObjectContext。有几篇文章讨论了这个问题:

如果您愿意,可以从这里开始:http ://www.ef-faq.org/objectcontext.html

希望有帮助..

于 2010-12-03T08:51:54.960 回答