C# ASP.NET MVC,模型位于独立程序集中

C# ASP.NET MVC,模型位于独立程序集中,c#,entity-framework,ado.net,ado.net-entity-data-model,C#,Entity Framework,Ado.net,Ado.net Entity Data Model,我目前正在开发一个.NET解决方案,它涉及几个子项目,包括一个ASP.NET MVC项目。我的模型已经被分离成一个单独的程序集,因为我需要从解决方案中的各种其他项目中使用它 我的模型由ADO.NET实体框架实体模型组成。我决定为我的模型使用单例模式,代码如下(saleEntities是我的实体模型的名称): 部分类实体 { 私有静态SalsaEntities _实例=新SALSAENTIENTIES(); /// ///salsa实体的单例实例。 /// 公共静态实体实例 { 得到 { 返回

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

我的模型由ADO.NET实体框架实体模型组成。我决定为我的模型使用单例模式,代码如下(saleEntities是我的实体模型的名称):

部分类实体
{
私有静态SalsaEntities _实例=新SALSAENTIENTIES();
/// 
///salsa实体的单例实例。
/// 
公共静态实体实例
{
得到
{
返回_实例;
}
}
}
然后,我从其他程序集中使用SalsaEntities.Instance。这在我拥有的第三个项目(一个Windows服务)中运行良好,尽管我必须在该项目的App.Config文件中包含连接字符串

但是,当我尝试使用ASP.NET MVC项目中的salsaeEntities.Instance时,我遇到了一个异常。尽管在项目根目录和视图目录的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服务可以很好地访问它,我认为这不是问题所在

帮忙

谢谢, 大卫


注意:我注意到的另一个怪癖是,当告诉VisualStudio创建一个新的强类型视图时,它会生成一个与模型部件相关的“未找到文件”错误。我在网上看到过几次关于这个错误的讨论,但都没有得到解决。

我不确定这里发生了什么,但米沙恩提出了一个好问题

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

超时您的ObjectContext将包含越来越多的对象,因此速度会减慢。有关原因的更多信息,请参阅


Alex

单例模式不适合基于ASP.NET的应用程序。您需要切换到类似于存储库模式的模式,以便在ASP.NET请求级别管理ObjectContext。有几篇文章对此进行了讨论:

如果您愿意,可以从这里开始:


希望对您有所帮助。

您是否尝试手动设置连接?私有静态SalsaEntities _实例=新的SalsaEntities(新的EntityConnection(System.Configuration.ConfigurationManager.ConnectionString[“SalsaEntities”].ConnectionString));是的,同样的错误。这段代码在Windows服务中运行良好。这应该可以运行。事实上,它确实对我们有用(根web.config中的connectionString。这里还有其他问题。您的web.config是否有效?您是否可以使用
ConnectionManager
检索connectionString,而不尝试创建EntityContext?如果没有,您的问题不在于EF。是的,我尝试在Visual Studio中无问题地对其进行监视,以及调试。打印con。)连接字符串的帐篷。两者都可以正常工作。您是否有机会预生成视图?因为这是一个ASP.NET应用程序,单例的生命周期不应该只存在于页面加载完成之前吗?静态变量将一直挂起,直到应用程序池回收。有趣。您的评论仍然不能解决我的问题,但我将拒绝由于性能原因,我不得不改变单例。遗憾的是,即使我在本地实例化SalsaEntities,我仍然存在这个问题。
<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>