Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架与表示层的分离_.net_Asp.net Mvc_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

.net 实体框架与表示层的分离

.net 实体框架与表示层的分离,.net,asp.net-mvc,entity-framework,asp.net-mvc-4,.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我正在建立一个项目,我正在将层分为表示层、业务层和数据层 演示文稿参考资料业务 数据参考业务 商业只知道它自己 对于表示层,我使用MVC;对于数据层,我使用实体框架。在使用MVC应用程序时,当使用IOC通过业务层访问db时,我遇到以下错误 找不到具有固定名称“System.Data.SqlClient”的ADO.NET提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册 如果我使用nuget将实体框架添加到MVC项目中,那么一切都很好。然而,我

我正在建立一个项目,我正在将层分为表示层、业务层和数据层

演示文稿参考资料业务 数据参考业务 商业只知道它自己

对于表示层,我使用MVC;对于数据层,我使用实体框架。在使用MVC应用程序时,当使用IOC通过业务层访问db时,我遇到以下错误


找不到具有固定名称“System.Data.SqlClient”的ADO.NET提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册

如果我使用nuget将实体框架添加到MVC项目中,那么一切都很好。然而,我的意图是分离层,所以这样做似乎很奇怪

你对如何回避这个问题有什么想法吗


谢谢

如果您使用单个项目将所有这些层固定在一起,则没有其他方法。必须为使用实体框架配置的项目指定实体框架配置。但是,这并不一定会破坏目标分层结构。尽管表示层实际上可以直接而不是通过数据层访问数据,但您可以将其设计为不访问,即始终使用数据提供程序获取数据(例如,使用UnitOfWork)


另一种方法是为每个层创建单独的应用程序/项目。您的数据层将是一个“独立”项目,具有自己的配置。然后,您的表示层将引用数据层项目,并通过它提供的方法与之通信,以便交换数据。

首先,您的Mvc项目必须具有EF的配置

例如:

 <configuration> 
  <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" 
       type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
  </configSections> 
</configuration>

然后

<connectionStrings> 
  <add name="BlogContext"  
        connectionString="metadata=res://*/BloggingModel.csdl| 
                                                       res://*/BloggingModel.ssdl| 
                                                       res://*/BloggingModel.msl; 
                                           provider=System.Data.SqlClient 
                                           provider connection string= 
                                               &quot;data source=(localdb)\v11.0; 
                                               initial catalog=Blogging; 
                                               integrated security=True; 
                                               multipleactiveresultsets=True;&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings>


我认为您混淆了层的分离和项目依赖关系。如果您希望在数据项目中包含所有与数据相关的内容,那很好。您可以保留您的上下文、迁移等。但是,如果其他项目需要使用该数据层,那么它们需要安装实体框架来支持该通信。这并不意味着您正在泄漏数据层代码,这只是一个简单的依赖关系。

您的Mvc项目必须具有EF的配置。我认为这不是一个有效的答案,因为问题是关于项目架构,而不是关于如何配置实体框架。海报特别指出,他们使用Nuget添加了EF,并且成功运行。没有为ADO.NET提供程序找到具有不变名称“System.Data.SqlClient”的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。您只需阅读下一条语句:如果我使用nuget将entityFramework添加到MVC项目中,则一切正常。然而,我的意图是分离层,所以这样做似乎很奇怪,因为它添加了这些配置。试试看,伙计。。。。我相信你会明白我的意思。这是有道理的。正如你在这里提到的,我将进一步研究如何将其分离。非常感谢