实体框架与表示层的分离

时间:2014-09-09 11:25:12

标签: .net asp.net-mvc entity-framework asp.net-mvc-4

我正在设置一个项目,我将这些层分为演示文稿,业务和数据。

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

对于Presentation层,我使用的是MVC,而对于数据层,我使用的是Entity Framework。虽然使用MVC应用程序,但在使用IOC通过业务层访问数据库时出现以下错误

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

如果我使用nuget将实体框架添加到MVC项目,一切都很好并且工作正常。但是,我打算将图层分开,这样看起来很奇怪。

您对如何解决此问题有任何想法吗?

由于

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

首先,您的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>

在此处查看... Referencing to the EntityFramework.dll cause an run-time error in VS2010

答案 2 :(得分:0)

我认为您将图层分离与项目依赖关系混淆。如果您想在数据项目中使用所有与数据相关的内容,那很好。您可以保留上下文,迁移等。但是,如果其他项目需要使用该数据层,则需要安装Entity Framework才能启用该通信。这并不意味着您正在排除数据层代码,它只是一个简单的依赖。