Entity Framework 使用 xbuild 和 mono 时未嵌入元数据工件

Entity Framework metadata artifact not embeded when using xbuild and mono

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

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

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

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

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

Unable to load the specified metadata resource.

我使用的是单声道版本4.2.2

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

我已经实施了以下解决方法,直到单声道嵌入 Entity Framework 元数据工件

  1. 第 1 步 - 将您的 EntityFramework 模型的元数据工件处理 属性 从 "Embed in Output Assembly" 更新为 "Copy to Output Directory"

这会将元数据工件文件复制到包含 .edmx(Project1)

的项目的 bin 文件夹中
  1. 步骤 2 - 将以下 post 构建事件添加到引用项目 (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" />