标签: fluent-migrator

是否可以将列默认设置为SQL Server的Ne​​wId()?

在fluentMigrator中,是否可以将列默认设置为函数?

具体来说,我将一个uniqueidentifier(Guid)列添加到已包含数据的SQL Server 2008表中,它将成为必填字段 - 是否可以将默认值设置为NewId()函数?

fluent-migrator

10
推荐指数
1
解决办法
3113
查看次数

迁移器说明(FluentMigrator)?

有人可以解释迁移者(特别是流利者)的概念吗?

以下是我在这个问题上收集到的(可能是混乱的)事实:

  • 它是一种通过版本控制最初创建然后维护数据库更新的方法.

  • 第一个迁移(或数据库的初始版本)将包含所需的所有表,关系和属性(流畅地完成或在脚本中使用一大块sql).

  • 如果要将更改推送到数据库,可以创建新的迁移方法(向上和向下),例如添加新表或修改字段.

  • 要部署其中一个迁移,您将使用命令行指定包含迁移的dll,连接字符串和所需的版本.

如果您有一组相当复杂的数据模型,那么为所有这些模型创建迁移定义会不会相当困难和耗时?

我知道使用nHibernate/fluent,您可以轻松地为数据库生成表,而无需定义除模型和映射文件之外的任何内容.有没有办法使这个配置与Migrator/Versioning兼容?

当nhibernate/fluent负责生成数据库时,我不一定需要定义表的每个方面.它通过约定或映射文件完成.有了迁移器,我需要定义这个级别的细节吗?

c# database-versioning fluent-migrator

10
推荐指数
1
解决办法
4981
查看次数

实体框架迁移可以做什么,FluentMigrator不能做到?

我目前有几个数据库使用FluentMigrator,我很想知道实体框架迁移的比较.

EF迁移可以在迁移中播种数据,并根据FluentMigrator等环境选择性地运行迁移脚本吗?

我已经在使用EF Database First作为我的应用程序的ORM了,我想我现在也读到了非Code First EF支持EF迁移的地方,但我的团队一直在考虑重构Code First方法,因为数据库优先方法的一些限制.那么EF Migrations在使用代码优先方法时,是否更有意义使用而不是拥有另一个第三方迁移框架?

.net asp.net-mvc entity-framework fluent-migrator ef-code-first

10
推荐指数
1
解决办法
3211
查看次数

FluentMigrator迁移成功,但没有更改DB

我必须遗漏一些非常基本的东西.

我正在研究一个遗留项目,我正在尝试将FluentMigrator引入混合,因为我有一些有趣的数据库更改和数据迁移,我认为使用此工具会更容易.

对于初始迁移,我只想按原样将数据库升级到当前的生产版本.为了简化初始迁移,我编写了SQL Server 2008数据库脚本,并且迁移将脚本化命令作为一系列SQL命令执行.

为了测试它,我创建了一个完全空的数据库,并尝试使用以下命令行运行它:

> migrate -a "C:\My\Project\Path\bin\debug\Rds.MyProjName.DBMigrations.dll" 
-db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2008;Initial Catalog=myNewDbName;
Integrated Security=SSPI" -version=20100901000000
Run Code Online (Sandbox Code Playgroud)

指定的版本是第一个迁移类的Migration属性的时间戳.

在命令行,一切似乎都运行正常 - 整个脚本缩放,结束时:

-- CreateProductionDbCircaSep2010: migrated
Run Code Online (Sandbox Code Playgroud)

但是,当我看一下数据库时,它仍然是空的.绝对没有什么在那里.My Up方法如下所示:

public override void Up()
{
    var cmds = LoadEmbeddedResources
        .GetEmbeddedResource("scripted_db_2010-09-01.sql")
        .AsString()
        .ParseCommands();

    foreach (var c in cmds) {
        Execute.Sql(c);
    }

    CreateReferenceData();
}
Run Code Online (Sandbox Code Playgroud)

(仅供参考,我正在解析脚本而不是按原样运行它,因为我开始使用Migrator.Net之前发现它已经死了,而且已经设置好了.)

任何人都可以帮我一把吗?它几乎看起来像是一个事务没有提交,或者某个命令行选项让迁移执行干运行已打开,但我看不到它......

编辑:我尝试过的其他事情

为了确认连接字符串是否正在使用我期望的数据库,我重命名了数据库,然后按预期出现了登录错误.

为了进一步测试,我减少了脚本的长度,并尝试使用它来执行它

public override void Up()
{
    Execute.Script(@"..\Resources\test.sql"); 
}
Run Code Online (Sandbox Code Playgroud)

而不是逐个命令,但我得到相同的结果.这是该测试的输出(注意,我编辑了pathes等):

C:\My\Project\Path\FluentMigrator.Net\ >migrate -a "C:\My\Project\Path\bin\debug
\My.Project.DBMigrations.dll" -db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2
008;Initial Catalog=myNewDbName;Integrated Security=SSPI" -version=2010090100000
0
Using Database …
Run Code Online (Sandbox Code Playgroud)

.net fluent-migrator

9
推荐指数
3
解决办法
3547
查看次数

可以在迁移中添加级联删除规则吗?

在FluentMigrator迁移中,如果我正在定义关系,请说:

Create.Table("RelatedTable")
    .WithColumn("RelatedTableId").AsGuid().PrimaryKey()
    .WithColumn("MainTableId").AsGuid().NotNullable();
    .WithColumn("SomeInfo").AsString().NotNullable();

Create.Table("MainTable")
    .WithColumn("MainTableId").AsGuid().PrimaryKey()
        .ReferencedBy("FK_RelatedTable_RelatedTableId", "RelatedTable", "MainTableId")
    .WithColumn("AField").AsInt64().NotNullable()
    .WithColumn("AnotherField").AsString().NotNullable();
Run Code Online (Sandbox Code Playgroud)

有没有办法在它们之间定义级联删除类型的关系?例如,如果您从MainTable中删除了某些内容,那么任何相关记录也会被删除?

fluent-migrator

9
推荐指数
1
解决办法
3311
查看次数

数据库版本部署.实体框架迁移与SSDT DacPacs

我有一个带有SQL Server的以数据为中心的应用程序.它将被部署的环境不在我们的控制之下,并且没有DBA(它们都是小型企业),因此我们需要尽可能自动地分发每个应用程序/数据库更新的过程.

除了应用程序版本之间的正常变化(有时候是不可预测的),我们已经知道我们需要为每个版本分发一些新的种子数据.有时,此种子数据将与我们系统中的其他数据相关.例如:在v2-v3更新过程中,我们可能需要插入2个新行的某些主数据,在v5-v6更新过程中需要插入其他5行.

EF

我们已经检查了Entity Framework Db Migrations(可用于自4.3.1版本以来没有Code-First的现有数据库),它以更自动和受控的方式表示传统的顺序脚本(如Fluent Migrations).

SSDT

另一方面,凭借不同的理念,我们检查了SSDT及其dacpac,快照以及部署前和部署后脚本.

问题是:

  1. 哪些技术/哲学更适合所描述的案例?

  2. 可以使用的任何其他技术/哲学?

  3. 还有其他建议吗?

提前致谢.

database-migration data-tier-applications fluent-migrator sql-server-2012 entity-framework-4.3

9
推荐指数
1
解决办法
2914
查看次数

回滚到Fluent Migrator中的先前版本

我正在尝试使用流畅的迁移器使用我的项目进行迁移.但由于缺乏文档,我正在努力弄清楚如何回滚并Down为我的迁移类调用该方法.

我使用初始版本1类设置数据库:

[Migration(1)]
public class Baseline : Migration
{
    public override void Up()
    {
        Execute.Script("1_Baseline\\baseline.sql");
    }

    public override void Down() { }
}
Run Code Online (Sandbox Code Playgroud)

我正在通过包含以下内容的批处理文件运行迁移:

"....\tools\fluentmigrator\migrate.exe" - connect"Data Source =.\ sqlexpress; Initial Catalog = ekmDomains; Integrated Security = true; multipleactiveresultsets = true;" --db SqlServer2005 --target"bin\Release\EkmDomains.Migrations.dll"

这很好用.然后我写了第二个迁移类来测试它:

[Migration(2)]
public class AddNewTable : Migration
{
    public override void Up()
    {
        Create.Table("NewTable").WithColumn("name").AsString();
    }

    public override void Down()
    {
        Delete.Table("NewTable");
    }
}
Run Code Online (Sandbox Code Playgroud)

再次运行批处理文件后,一切正常.然后,我查看了流畅的迁移器工具的命令行选项,并看到了一个--version选项.我认为回滚到以前的版本我想简单地提供--version 1DownAddNewTable将被调用.然而,这并没有发生.控制台只显示"提交事务"方法然后关闭.但该表尚未删除,版本号未更改.

我这样做的方式是错误的,还是有人能看到我这样做的一些根本缺陷?

.net c# migration fluent-migrator

7
推荐指数
1
解决办法
5025
查看次数

在Execute.WithConnection操作中调用FluentMigrator方法

在我传递给的操作内部调用FluentMigrator的构建器方法Execute.WithConnection会导致抛出空引用异常.

我要做的是选择一些数据,以便我可以在c#中操作它,因为这比在T-SQL中操作它更容易,并使用我的c#操作的结果来更新数据或插入新数据(是更具体地说,我需要从存储的url字符串中选择一个查询字符串参数并将其插入其他地方).

我在迁移中选择数据的唯一方法是自己使用Execute.WithConnection和检索数据(FluentMigrator没有提供用于选择数据的帮助程序),但是如果我尝试在动作中使用任何流畅的迁移器表达式,我将传递给Execute.WithConnection空引用异常是抛出.

这是我的代码的简化版本:

[Migration(1)]
public class MyMigration : Migration 
{
  public void Up() 
  {
    Execute.WithConnection(CustomDml);
  }

  public void CustomDml(IDbConnection conn, IDbTransaction tran)
  {
    var db = new NPoco.Database(conn).SetTransaction(tran); // NPoco is a micro-ORM, a fork of PetaPoco
    var records = db.Fetch<Record>("-- some sql"); // this is immediately evaluated, no reader is left open
    foreach (var r in records) {
      var newValue = Manipulate(r.OriginalValue);
      Insert.IntoTable("NewRecords").Row(new { OriginalValueId = r.Id, NewValue = newValue }); // …
Run Code Online (Sandbox Code Playgroud)

fluent-migrator

7
推荐指数
1
解决办法
3269
查看次数

Fluent Migrator 相对于 EF 迁移有何优势?

目前我正在做的项目,已经从EF迁移改为Fluent Migrator。与 ef 迁移相比,Fluent Migrator 有哪些优势?是否真的值得使用 EF 迁移?

entity-framework fluent-migrator

7
推荐指数
1
解决办法
1354
查看次数

FluentMigrator - 在删除之前检查外键是否存在

我正在使用 FluentMigrator 将一个数据库架构迁移到另一个数据库架构。我有一个案例,我想在删除它之前检查外键是否存在。

以前,我只是通过执行以下操作来删除外键:

Delete.ForeignKey("FK_TableName_FieldName").OnTable("TableName");
Run Code Online (Sandbox Code Playgroud)

如何首先检查外键是否存在?

.net c# sql-server fluent-migrator

6
推荐指数
1
解决办法
3115
查看次数