【问题标题】:entity framework code first migrations from seperate windows class library实体框架代码首先从单独的 Windows 类库迁移
【发布时间】:2013-07-05 05:27:36
【问题描述】:

我有一个解决方案,其中包含一个 MVC 项目和 Windows 类库项目,它使用实体框架并且是一个数据访问层。我尝试使用以下包管理器控制台行启用迁移 Enable-Migrations -ProjectName PortlandRoad.DAL -ContextTypeName PortlandRoadDBContext -Force

我尝试使用以下行更新数据库 更新数据库 -Verbose -Force

如果我将 mvc 项目作为启动项目执行此操作,它可以工作,但使用 mvc 项目 web.config 中的连接字符串。如果我将 dAL 项目作为启动项目执行此操作,则会收到以下错误:

发生文件激活错误。物理文件名“\PortlandRoadDB.mdf”可能不正确。诊断并更正其他错误,然后重试该操作。 创建数据库失败。无法创建列出的某些文件名。检查相关错误。

我的 DAL 项目的 app.config 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!--<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />-->
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=PortlandRoadDB;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\PortlandRoadDB.mdf" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
</configuration>

谁能告诉我如何纠正这个问题,以便迁移专门为 dal 项目工作,而不依赖于作为启动项目的 MCV 项目

谢谢

【问题讨论】:

    标签: entity-framework web-config app-config entity-framework-migrations


    【解决方案1】:

    我在 WPF 项目中遇到了同样的问题。 我认为你有两个选择。

    选项 1 在 Windows 项目启动时,尝试使用

    指定数据库的正确路径

    AppDomain.CurrentDomain.SetData("DataDirectory","your\physical\path");

    这样,您将遇到同样的错误,但您的迁移仍然可以应用于您的主体数据库。

    选项 2 找到一种方法来动态替换这个 |DataDirectory|在您的 app.config 文件中,然后再启动您的应用程序。 (.bat 或 .ps 或 ...)。

    另一种选择:坏的选择。 在运行迁移之前,将 DataDirectory 的路径更改为 app.config 中的物理临时路径(此文件将帮助您保持最新的迁移历史记录) 在启动您的应用程序之前,将临时文件路径替换为 |DataDirectory|并在启动时使用 App.config 更改此参数 通过这项工作,如果您计划部署您的应用程序,您将跟踪所有迁移,以便预测未来的数据库修改。

    瞧。

    【讨论】:

      【解决方案2】:

      可能是您正在使用“|DataDirectory|”在 DAL 项目的连接字符串中?由于“|数据目录|”是一个 Asp.Net 文件夹,而 DAL 项目不是一个 Asp 项目,它可能无法将其识别为目录,并且可能不存在 DAL 项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-11
        • 2017-12-28
        • 2013-12-29
        • 2015-12-04
        • 1970-01-01
        相关资源
        最近更新 更多