.net 实体框架与表示层的分离
我正在建立一个项目,我正在将层分为表示层、业务层和数据层 演示文稿参考资料业务 数据参考业务 商业只知道它自己 对于表示层,我使用MVC;对于数据层,我使用实体框架。在使用MVC应用程序时,当使用IOC通过业务层访问db时,我遇到以下错误.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项目中,那么一切都很好。然而,我
找不到具有固定名称“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=
"data source=(localdb)\v11.0;
initial catalog=Blogging;
integrated security=True;
multipleactiveresultsets=True;""
providerName="System.Data.EntityClient" />
</connectionStrings>
我认为您混淆了层的分离和项目依赖关系。如果您希望在数据项目中包含所有与数据相关的内容,那很好。您可以保留您的上下文、迁移等。但是,如果其他项目需要使用该数据层,那么它们需要安装实体框架来支持该通信。这并不意味着您正在泄漏数据层代码,这只是一个简单的依赖关系。您的Mvc项目必须具有EF的配置。我认为这不是一个有效的答案,因为问题是关于项目架构,而不是关于如何配置实体框架。海报特别指出,他们使用Nuget添加了EF,并且成功运行。没有为ADO.NET提供程序找到具有不变名称“System.Data.SqlClient”的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。您只需阅读下一条语句:如果我使用nuget将entityFramework添加到MVC项目中,则一切正常。然而,我的意图是分离层,所以这样做似乎很奇怪,因为它添加了这些配置。试试看,伙计。。。。我相信你会明白我的意思。这是有道理的。正如你在这里提到的,我将进一步研究如何将其分离。非常感谢