即使访问仅限于我的数据访问层,我是否需要 Entity Framework 在我的 UI 中引用?
Do I need Entity Framework Referenced In My UI even if access is limited to my data access layer?
我有一个 n 层应用程序,其数据库 activity 在我的数据访问层中执行。我有一个应用层,它要求我的数据访问层从数据访问层的存储库中执行任务。我的用户界面,目前是一个简单的控制台应用程序,用于测试结果,它要求我的应用程序层获取诸如数据列表之类的东西,而应用程序层又从存储库中获取这些数据,然后全部返回到控制台应用程序。
如果我不在我的控制台应用程序中添加 entity framework 作为参考,我会收到以下错误:
The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
当控制台应用程序没有进行数据访问调用或 entity framework 操作时,为什么我会收到此错误消息?所有这些都是在我的数据访问层中完成的,它确实引用了 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 部分和数据库字符串,我会收到以下错误:
{"Schema specified is not valid. Errors: \r\nModelEntities.ssdl(2,2) : error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information."}
然后,如果我删除执行 entityframework 注册的配置部分,我会得到同样的错误。
如果我将 EntityFramework 添加到我的解决方案的控制台项目中,所有这些错误都会消失,该项目还将这些条目添加到 app.config
存储库层将在为 运行 应用程序域加载的配置文件中查找 EF 配置。所以是的,您的控制台应用程序需要配置并且需要 EF 引用。如果您的存储库位于外部服务或其他进程中,那么您将不需要 EF 引用。
只有数据/存储库层应该知道与 Db 相关的 dll/逻辑,但我遇到了与 entity framework 相同的问题。
MSBuild 未在 bin/debug 文件夹中复制此 EF SQL dll。我必须将此 dll 包含在我的 UI 项目中。
原因,如果我没记错的话,是因为 MSBuild 试图做一些智能的事情,即:如果它无法在某种依赖树中找到引用,它不会将其包含在输出中或 bin/debug 文件夹。 (不记得出处了)
我有一个 n 层应用程序,其数据库 activity 在我的数据访问层中执行。我有一个应用层,它要求我的数据访问层从数据访问层的存储库中执行任务。我的用户界面,目前是一个简单的控制台应用程序,用于测试结果,它要求我的应用程序层获取诸如数据列表之类的东西,而应用程序层又从存储库中获取这些数据,然后全部返回到控制台应用程序。
如果我不在我的控制台应用程序中添加 entity framework 作为参考,我会收到以下错误:
The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
当控制台应用程序没有进行数据访问调用或 entity framework 操作时,为什么我会收到此错误消息?所有这些都是在我的数据访问层中完成的,它确实引用了 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 部分和数据库字符串,我会收到以下错误:
{"Schema specified is not valid. Errors: \r\nModelEntities.ssdl(2,2) : error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information."}
然后,如果我删除执行 entityframework 注册的配置部分,我会得到同样的错误。
如果我将 EntityFramework 添加到我的解决方案的控制台项目中,所有这些错误都会消失,该项目还将这些条目添加到 app.config
存储库层将在为 运行 应用程序域加载的配置文件中查找 EF 配置。所以是的,您的控制台应用程序需要配置并且需要 EF 引用。如果您的存储库位于外部服务或其他进程中,那么您将不需要 EF 引用。
只有数据/存储库层应该知道与 Db 相关的 dll/逻辑,但我遇到了与 entity framework 相同的问题。 MSBuild 未在 bin/debug 文件夹中复制此 EF SQL dll。我必须将此 dll 包含在我的 UI 项目中。
原因,如果我没记错的话,是因为 MSBuild 试图做一些智能的事情,即:如果它无法在某种依赖树中找到引用,它不会将其包含在输出中或 bin/debug 文件夹。 (不记得出处了)