1

当我尝试在 Linux 或 Windows 环境中使用 EntityFramework 和 MySQL 时,我遇到了以下问题:

项目 1:包含 EntityFramework edmx 和使用 dbcontext 类插入更新数据的逻辑 项目 2:参考项目 1。

当我使用 msbuild 构建解决方案时,EntityFramework 元数据文件嵌入在 Project1.dll 中

在此处输入图像描述

当我在 Linux 环境或 Windows 环境中使用 xbuild 进行干净构建时,缺少 EntityFramework 元数据文件

在此处输入图像描述

当您运行应用程序时,您会收到以下错误:

无法加载指定的元数据资源。

我正在使用单声道版本4.2.2

有人知道在使用 xbuild 时嵌入 EntityFramework 元数据文件的解决方案吗?

4

1 回答 1

2

我已经实现了以下解决方法,直到 mono 嵌入实体框架元数据工件

  1. 第 1 步 - 将 EntityFramework 模型的元数据工件处理属性从“嵌入输出程序集”更新为“复制到输出目录”

在此处输入图像描述

这会将元数据工件文件复制到包含 .edmx(Project1) 的项目的 bin 文件夹中

  1. 第 2 步 - 将以下构建后事件添加到引用项目 (Project2) 以将元数据工件文件复制到其 bin。您可以将它们添加到 .csproj 项目文件的末尾。将Project1替换为您的项目名称。

    <PropertyGroup>
       <PostBuildEvent Condition=" '$(OS)' != 'Unix' ">copy /Y   "$(ProjectDir)..\Project1\bin\Debug\Models\*" "$(ProjectDir)\bin\Debug\"  </PostBuildEvent>
       <PostBuildEvent Condition=" '$(OS)' == 'Unix' ">cp -a "$(ProjectDir)../Project1/bin/Debug/Models/." "$(ProjectDir)bin/Debug/"  </PostBuildEvent>
    </PropertyGroup>
    
  2. 第 3 步 - 更新您的连接字符串

    <add name="EntityframeworkTestEntities" connectionString="metadata=res://*/EntityFrameworkTestModel.csdl|res://*/EntityFrameworkTestModel.ssdl|res://*/EntityFrameworkTestModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=EntityframeworkTest;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    <add name="EntityframeworkTestEntities" connectionString="metadata=EntityFrameworkTestModel.csdl|EntityFrameworkTestModel.ssdl|EntityFrameworkTestModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=EntityframeworkTest;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    
于 2016-02-23T13:22:35.637 回答