我正在设置一个项目,我将这些层分为演示文稿,业务和数据。
演示文稿参考业务 数据引用业务 商业只知道它自己
对于Presentation层,我使用的是MVC,而对于数据层,我使用的是Entity Framework。虽然使用MVC应用程序,但在使用IOC通过业务层访问数据库时出现以下错误
没有为ADO.NET提供程序找到具有不变名称“System.Data.SqlClient”的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分中注册
如果我使用nuget将实体框架添加到MVC项目,一切都很好并且工作正常。但是,我打算将图层分开,这样看起来很奇怪。
您对如何解决此问题有任何想法吗?
由于
答案 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=
"data source=(localdb)\v11.0;
initial catalog=Blogging;
integrated security=True;
multipleactiveresultsets=True;""
providerName="System.Data.EntityClient" />
</connectionStrings>
在此处查看... Referencing to the EntityFramework.dll cause an run-time error in VS2010
答案 2 :(得分:0)
我认为您将图层分离与项目依赖关系混淆。如果您想在数据项目中使用所有与数据相关的内容,那很好。您可以保留上下文,迁移等。但是,如果其他项目需要使用该数据层,则需要安装Entity Framework才能启用该通信。这并不意味着您正在排除数据层代码,它只是一个简单的依赖。