2

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

我尝试使用以下行更新数据库 Update-Database -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 项目

谢谢

4

2 回答 2

2

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

选项 1 在您的 windows 项目启动时尝试使用指定正确的数据库路径

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

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

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

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

瞧。

于 2014-03-01T12:55:46.060 回答
0

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

于 2013-11-05T18:15:09.253 回答