【问题标题】:EF giving me error in Production and not Dev.EF 在生产中给我错误,而不是在开发中。
【发布时间】:2013-04-15 17:00:47
【问题描述】:

我有以下由生成的 EF 模型使用的连接字符串。它在我的本地机器上正常工作,但是当我部署时,我收到以下错误。我查看了在 SO 上多次引用的 URL:http://blogs.teamb.com/craigstuntz/2010/08/13/38628/,如果它有答案,我看不到它。

我在下面粘贴错误

  <add name="svcodecampEntitiesAllTables" connectionString="metadata=res://*/EFModel.ModelAllTables.csdl|res://*/EFModel.ModelAllTables.ssdl|res://*/EFModel.ModelAllTables.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=svcc;integrated security=True;persist security info=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

{"message":"An error has occurred.","exceptionMessage":"Unable to load the specified metadata resource.","exceptionType":"System.Data.MetadataException","stackTrace":"   at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n   at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource..ctor(String originalPath, String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n   at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n   at System.Data.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)\r\n   at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths)\r\n   at System.Data.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0()\r\n   at System.Data.Common.Utils.Memoizer`2.Result.GetValue()\r\n   at System.Data.Common.Utils.Memoizer`2.Evaluate(TArg arg)\r\n   at System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections)\r\n   at System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection()\r\n   at System.Data.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor)\r\n   at System.Data.Objects.ObjectContext..ctor(EntityConnection connection)\r\n   at System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel()\r\n   at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()\r\n   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()\r\n   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)\r\n   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()\r\n   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()\r\n   at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()\r\n   at System.Linq.Queryable.Select[TSource,TResult](IQueryable`1 source, Expression`1 selector)\r\n   at WebAPI.rest.AttendeesDashboardController.Get(String userSearch, Nullable`1 presentersOnly, Nullable`1 currentCodeCampYearOnly, Nullable`1 start, Nullable`1 limit) in c:\\VCProject\\SVCodeCampWeb\\WebAPI\\rest\\AttendeesDashboardController.cs:line 97\r\n   at lambda_method(Closure , Object , Object[] )\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.<ExecuteAsync>b__4()\r\n   at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)"}

【问题讨论】:

    标签: entity-framework entity-framework-5


    【解决方案1】:

    我也有这个问题。我通过显式命名包含模型的程序集来修复它。

    所以,如果您的模型在“Product.DAL.dll”中,而不是:

      metadata=res://*/EFModel.ModelAllTables.csdl|...
    

    放:

      metadata=res://Product.DAL/EFModel.ModelAllTables.csdl|...
    

    对于所有 3 个元数据资源

    【讨论】:

    • 我的模型在下面。不完全确定用什么替换 *。
    • 注意确定要替换的内容。我的模型:命名空间 WebAPI.EFModel { using System;使用 System.Data.Entity;使用 System.Data.Entity.Infrastructure;公共部分类 svcodecampEntitiesAllTables : DbContext { public svcodecampEntitiesAllTables()
    • 这篇博文解释(非常详细!)Troubleshooting Entity Framework Connection Strings
    • 嗨,尼古拉斯。您提供的参考与我在问题顶部提到的参考完全相同,说我已经看过它但对我没有帮助。
    • 哎呀-对不起!您需要将 *s 替换为包含您的模型 .edmx 文件的程序集的名称 - 而不是名称空间,尽管它们可能相同。首先在您的开发机器上试一试,以确保您做对了。
    【解决方案2】:

    您必须添加对包含 edmx 图的项目的引用并更改 Nunit 项目中的连接字符串

    改变

    <add name="ContainerName" connectionString="metadata=res://*/Diagram.csdl|re.....
    

    元数据中3个地方的图书馆名称

    <add name="ContainerName"connectionString="metadata=res://File.Data/Diagram.csdl|res://File.Data/Diagra...
    

    “File.Data”是File.Data.dll,由包含图表的项目生成的库

    【讨论】:

      【解决方案3】:

      我有同样的问题,通过运行自定义工具解决了。右键单击 Model.tt 文件并单击运行自定义工具并对 context.tt 文件和 Model.edmx 文件重复相同的操作。重建应用程序将起作用。

      【讨论】:

        猜你喜欢
        • 2017-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-22
        • 2012-01-11
        • 2014-07-23
        • 1970-01-01
        相关资源
        最近更新 更多