DAL に Entity Framework を使用しています (DBContext を使用)。私たちが注目している階層化されたアーキテクチャは、関心の分離に大きく依存しており、この目的のために、生成されるエンティティ クラスは別のクラス プロジェクトに入る必要があります。プログラムは単体テスト可能である必要があるため、リポジトリ パターンを使用しています。そのため、EF から取得した DbContext を抽象化する必要があります。これはすべて、エンティティ クラスとコンテキスト クラスが、edmx ファイルが存在する同じプロジェクトにないことを意味します。問題は、ファイルを移動すると、次の例外が発生し始めることです
未処理の例外: System.Data.MetadataException: 指定されたメタデータ リソースを読み込めません。System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResou rces
(String assemblyName, String resourceName, ICollection 1 uriReg istry, MetadataArtifactAssemblyResolver resolver) で System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader (String path, ExtensionCheck extensionCheck, String validExtension)で、I コレクション1 uriRegistry、メタデータ ataArtifactAssemblyResolver リゾルバー) System.Data.Metadata.Edm.MetadataCache.SplitPaths(String パス) で System.Data.Common.Utils.Memoizer 2.Result.GetValue() で System.Data.Common. Utils.Memoizer1 uriRegistry, Metada taArtifactAssemblyResolver resolver) at
System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource..ctor(Str ing originalPath, String assemblyName, String resourceName, ICollection1 uriRegistry, MetadataArtifactAssemblyResolver resolver) at
System.Data.Metadata.Edm.MetadataArtifactLoader.Create(String path, Extens ionCheck extensionCheck, String validExtension, ICollection2.<>c__DisplayClass2.<Evaluate>b__0() at System.Data.Common.Utils.Memoizer
2.Evaluate(TArg arg) at
1.Initialize()
System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean ini tializeAllCollections) at
System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection( ) at System.Data.Objects.ObjectContext..ctor(EntityConnection connection, Boole an isConnectionConstructor) at
System.Data.Objects.ObjectContext..ctor(EntityConnection connection)
at
System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConn ectionModel() at
System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFrom ConnectionModel() at
System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (Type entityType) at
System.Data.Entity.Internal.Linq.InternalSet
System.Data.Entity.Internal.Linq.InternalSetで1.System.Linq.IQueryable.get_Pro vider() で System.Linq.Queryable.Where[TSource](IQueryable 1 predicate) で BusinessLayer.CustomerLocator .LocateCustomerByIdint id) in C:\Sandbox\BusinessLayer\CustomerLocator.cs:line 41 at ClientApp.Program.Main(String[] args) in C:\Sandbox\ Program.cs:line 341.get_InternalContext()
at
System.Data.Entity.Infrastructure.DbQuery1 source, Expression
グーグルは、csdl、ssdsl などへのパスに関して何か問題がある可能性があることを示唆していますが、ここで何が問題なのかわかりません。以下は、接続文字列の設定方法です
<add name="DBConnection"
connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=Customers;persist security info=True;user id=user;password=password;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />