将实体框架添加到模块

时间:2013-12-11 14:10:14

标签: asp.net entity-framework orchardcms

我需要连接到Orchard中我的一个模块中的远程数据库,以便通过Entity Framework获取和保存数据。

我的问题是让连接启动并运行。我在尝试时遇到异常。

经过一些谷歌技能后,我认为问题是连接字符串。但我不知道该写些什么。我尝试了一切。

<add name="lvbb_dbEntities" connectionString="metadata=res://*/Services.Database.LvbbDataModel.csdl|res://*/Services.Database.LvbbDataModel.ssdl|res://*/Services.Database.LvbbDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=databaseurl;initial catalog=lvbb_db;persist security info=True;user id=username;password=password;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Stacktrace:

at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource..ctor(String originalPath, String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
at System.Data.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths)
at System.Data.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0()
at System.Data.Common.Utils.Memoizer`2.Result.GetValue()
at 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.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)
at Allvinskan.LVBBFunctions.Services.SaveDatabaseService.SaveUserModel(EditUserViewModel model) in c:\tfsOnline\Allvinskan\LVBB\X\src\Orchard.Web\Modules\Allvinskan.LVBBFunctions\Services\SaveDatabaseService.cs:line 16
at Allvinskan.LVBBFunctions.Controllers.UserController.EditUser(EditUserViewModel model) in c:\tfsOnline\Allvinskan\LVBB\X\src\Orchard.Web\Modules\Allvinskan.LVBBFunctions\Controllers\UserController.cs:line 64

1 个答案:

答案 0 :(得分:2)

前段时间我花了很多时间尝试在Orchard模块中进行EF工作。它最终奏效了。但它需要Orchard核心的一些黑客和补丁。主要问题是NHibernate和EF之间的重叠事务。 所以尽管事实是可能的,我不建议任何人走同一条路线。

在这种情况下,可能的干净解决方法是创建一个封装所有EF代码的Web服务,并从您的模块中调用此服务。两者都可以在同一台机器上运行。该服务仅限于localhost,以避免在有人试图从外部访问时出现安全问题。