2015-02-16 2 views
0

Я реализует подключаемую приложение MVC, описанное в этой статье: http://blog.longle.net/2012/03/29/building-a-composite-mvc3-application-with-pluggable-areas/#pluginEntity Framework проблема с плагином ASP.MVC архитектуры

В основном это имеет один главный веб-приложение (ASP.MVC 4) и некоторое количество суб-веб-приложений которые используют библиотеки классов в качестве их слоев (DAL, BLL).

У меня возникла следующая проблема. У меня есть модель сущности (edmx), определенная в библиотеке классов SubProject1.DataAccess. Затем у меня есть проект SubProject1.Web, и, наконец, у меня есть основной веб-проект. SubProject1.Web имеет следующее postbuild событие заявило:

xcopy "$(ProjectDir)\Views" "$(TargetDir)\SubProject1\Views\" /s /i /y 

Это также основной веб-приложение \Areas каталога устанавливается в качестве выходного пути.

Когда я пытаюсь получить доступ к какому-то объекту из DbContext объект по Entity Framework бросает следующее исключение:

Невозможно загрузить указанный ресурс метаданных.

StackTrace:

на System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources (String AssemblyName, Строка ResourceName, ICollection uriRegistry, MetadataArtifactAssemblyResolver распознаватель) при System.Data. Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader (String path, ExtensionCheck extensionCheck, String validExtension, ICollection uriRegistry, MetadataArtifactAssemblyResolver распознаватель) при System.Data.Metadata.Edm.MetadataCache.SplitPaths (String путей) на System.Data.Common.Utils.Memoizer 2.<>c__DisplayClass2.<Evaluate>b__0() at System.Data.Common.Utils.Memoizer 2.Result.GetValue() в System.Data.Common. Utils.Memoizer 2.Evaluate(TArg arg) at System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections) at System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection() at System.Data.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor) at System.Data.Objects.ObjectContext..ctor(EntityConnection connection)
at System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel() at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel() at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet
1.Initialize() в System.Data.Entity.Internal.Linq.InternalSet 1.GetEnumerator() at System.Data.Entity.Infrastructure.DbQuery 1.System.Collections.Generic.IEnumerable.GetEnumerator() на System.Collections.Generic.List 1..ctor(IEnumerable 1 сборник)
в System.Linq.Enumerable.ToList [TSource] (IEnumerable 1 source) at SubProject1.DataAccess.DataSources.OracleDb.OracleDb.get_Administrators() in c:\somepath\SubProject1.DataAccess\DataSources\OracleDb\OracleDb.cs:line 60 at SubProject1.Web.Controllers.SubTestController.Index() in d:\somepath\SubProject1.Web\Controllers\SubTestController.cs:line 16
at lambda_method(Closure , ControllerBase , Object[]) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 параметра) в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8 1.b__7 (IAsyncResult _) в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
на System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (IAsyncResult AsyncResult) в System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass37. <> c__DisplayClass39.b__33() at System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass4f.b__49()

Похоже, что EF не может найти местоположение файла edmx. Кто-нибудь знает, как я могу решить эту проблему?

+1

Поместите правильную строку подключения Entity Framework в свой web.config. – CodeCaster

ответ

1

Если каждый модуль имеет собственную EF-модель, каждая строка соединения для этих объектов должна находиться в главном веб-проекте, где все копии модуля будут скопированы.Основываясь на этой ошибке, кажется, что строка подключения, указывающая на метаданные файлов, не входит в этот окончательный файл конфигурации.

Смежные вопросы