私は、データアクセス層でデータベースアクティビティを実行するn層アプリケーションを持っています。私はデータアクセス層に、データアクセス層のリポジトリからのタスクを実行するように頼むアプリケーション層を持っています。私のユーザーインターフェイスは、今のところ単純なコンソールアプリケーションであり、結果をテストするためのものです。アプリケーションレイヤに、アプリケーションレイヤがリポジトリから取得し、すべてがコンソールアプリケーションに戻ってくるデータのリストを取得するように要求します。アクセスが自分のデータアクセスレイヤーに限定されていても、参照されるEntity FrameworkがMy UIに必要ですか?
私は私のコンソールアプリケーションの基準とエンティティフレームワークを追加しない場合、私は次のエラーを取得する:コンソールアプリケーションがデータアクセス呼び出しを行うものではありませんかとき
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が参照されているデータアクセスレイヤーで行われます。
アップデート:以下 は私のコンソールインターフェイスである:以下
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プロバイダのEntity Frameworkプロバイダが見つかりません。プロバイダがアプリケーション設定ファイルの 'entityFramework'セクションに登録されていることを確認してください。詳細についてはhttp://go.microsoft.com/fwlink/?LinkId=260882を参照してください。
エンティティフレームレジストリを実行する構成セクションを削除すると、同じことが起こりますエラー。私はまた、リポジトリ層がロードされた設定ファイルのEFの設定を探すために起こっているapp.configを
UIレイヤは、データレイヤで使用されているORMについて知るべきではありません。これは、ある種のエンティティを返すことを約束するインタフェースに対してのみプログラムする必要があります。 –
@LeonCullens ok私はそれを得た。そして、アプリケーション層サービスを使用するために依存関係注入を使用しています。なぜ、Entity Frameworkへの参照がないと上記のエラーが発生するのですか?私のコンソールアプリケーションにはその機能は何も言及されていませんか? – Robertcode
私はあなたのapp.configに上記のアセンブリ(DbFactoryなど)への参照があると思います。これらを削除してもう一度やり直してください。 –