我有一个n层应用程序,在我的数据访问层中执行了数据库活动。我有一个应用程序层,要求我的数据访问层执行数据访问层中存储库中的任务。我的用户界面(现在是一个简单的控制台应用程序)用于测试结果,它要求我的应用程序层获取诸如数据列表之类的数据,这些数据又从存储库中获取,然后又全部返回到控制台应用程序。
如果未在控制台应用程序中添加实体框架作为参考,则会出现以下错误:
无法加载在ADO.NET提供程序的应用程序配置文件中注册的实体框架提供程序类型'System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer',名称不变,名称为'System.Data.SqlClient'。确保使用了程序集限定名称,并且该程序集可用于正在运行的应用程序。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=260882。
当控制台应用程序不进行数据访问调用或实体框架操作时,为什么会出现此错误?所有这些操作都是在我的数据访问层中完成的,该数据访问层确实引用了Entity Framework。
更新:下面是我的控制台界面:
class MyServices
{
IProductRequestServices _ProductRequestServices;
public MyServices(IProductRequestServices _ProductRequestServices)
{
this._ProductRequestServices = _ProductRequestServices;
}
public void ProductList()
{
List<ProductRequestDetailDto> aList = _ProductRequestServices.GetProductRequestExtendedDetailAll();
foreach (ProductRequestDetailDto prodReq in aList)
{
System.Console.WriteLine("Product Req ID: {0} - Product Name: {1}",
prodReq.productRequestId.ToString(), prodReq.productName);
}
}
public void ClientList()
{
List<ProductRequestDetailDto> aList = _ProductRequestServices.GetProductRequestExtendedDetailAll();
foreach (ProductRequestDetailDto prodReq in aList)
{
System.Console.WriteLine("Product Req ID: {0} - Product Name: {1}",
prodReq.productRequestId.ToString(), prodReq.firstName + " " + prodReq.lastName);
}
}
}
class Program
{
static void Main(string[] args)
{
ProductRequestServices _ProductRequestServices = new ProductRequestServices();
MyServices MyServices = new MyServices(_ProductRequestServices);
MyServices.ProductList();
System.Console.WriteLine("============================");
MyServices.ClientList();
System.Console.ReadLine();
}
}
下面是App.config。
<?xml version="1.0" encoding="utf-8"?>
<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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<connectionStrings>
<add name="MDISContext" connectionString="metadata=res://*/ModelEntities.csdl|res://*/ModelEntities.ssdl|res://*/ModelEntities.msl;provider=System.Data.SqlClient;provider connection string="data source=WIN-2012-SRVR-3;initial catalog=MDIS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
如果仅删除entityFramework部分和数据库字符串,则会出现以下错误:
{“指定的架构无效。错误:\ r \ nModelEntities.ssdl(2,2):错误0152:未找到具有不变名称'System.Data.SqlClient'的ADO.NET提供程序的实体框架提供程序。提供程序已在应用程序配置文件的“ entityFramework”部分中注册。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=260882。“}
然后,如果我删除进行实体框架注册的配置部分,则会出现相同的错误。
如果我将EntityFramework添加到解决方案的控制台项目中,则所有这些错误都会消失,该项目也会将这些条目添加到app.config中
存储库层将在为运行中的应用程序域加载的配置文件中查找EF配置。因此,是的,您的控制台应用程序需要配置,并且需要EF引用。如果您的存储库位于外部服务或其他进程中,则不需要EF引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句