我正在使用fluentmigrator向表中添加新列.然后,我想要使用该列的唯一值更新表中的每一行.
目前我使用时:
Update.Table("Foo").InSchema("dbo").Set(new { Bar = Bar.Generate() }).AllRows();
Run Code Online (Sandbox Code Playgroud)
它为所有行提供相同的值.
我如何确保它为每一行调用该方法?
fluentmigrator的当前迭代是否适用于SQL Server 2012?它未列在受支持的数据库下.
我有一个由几个表使用的扩展方法:
public static ICreateTableColumnOptionOrWithColumnSyntax WithUser(this ICreateTableWithColumnSyntax tableWithColumnSyntax)
{
return tableWithColumnSyntax
.WithColumn("UserId")
.AsInt32()
.Nullable();
}
Run Code Online (Sandbox Code Playgroud)
这是一个使用它的示例表:
Create.Table("UserSettings")
.WithUser()
.WithColumn("SomeValue")
.AsString(1)
.Nullable();
Run Code Online (Sandbox Code Playgroud)
然后我必须每次手动添加一个外键,如下所示:
Create.ForeignKey()
.FromTable("UserSettings")
.ForeignColumn("UserID")
.ToTable("Users")
.PrimaryColumn("Id");
Run Code Online (Sandbox Code Playgroud)
有没有办法在扩展方法中打包外键声明,WithUser()以便我(更重要的是,我的团队中的其他人)不必每次都指定它?
我需要通过fluent-migrator重命名现有表的主键,以便automapper可以自动检测列.
对于大多数列,只需FluentMigrator删除该列的任何外键约束,1)删除该列的索引2)并重命名该列.我历史上这样做是通过:
Delete.ForeignKey("foreignkeyconstraint").OnTable("mytable");
Delete.Index("UserId").OnTable("mytable");
Rename.Column("UserId").OnTable("mytable").To("UserInfo_id");
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不适用于主键,因为我无法删除该列上自动创建的索引.使用fluent-migrator重命名主键列的正确方法是什么?
一般的建议是我应该总是测试我的数据库迁移,但是如何做到这似乎是一个保密的秘密;)
我选择的框架是FluentMigration.
我想我想做的是:
但我无法弄清楚如何从我的单元测试中运行迁移.
假设我在同一个数据库中有两个独立的表,表 Book 和 Cup。我只用主键 (int) 创建,称为 Id。然后,为了保持整洁,我将它们分成不同的项目并为两者创建 FluentMigrations,它们将驻留在Book.Migrations.dll和 中Cup.Migrations.dll。
现在我意识到也许我的书应该可以有一个名字,并创建一个新的迁移来添加一个名为 name 的列。我将此版本设置为 201408111220(因此是撰写本文时的时间戳),并将其称为 AddNameToBook。我应用此迁移并相应地更新数据库。
然后我意识到也许杯子应该有颜色。所以我在另一个项目中创建了一个新的迁移,版本为 201408111221,并将其命名为 AddColorToCup。我再次运行迁移,并更新数据库。
据我所知,到目前为止一切正常。我不确定的是,如果我现在向 Book 添加另一个迁移,例如 201408111224,应用它,然后尝试回滚。由于现在201408111221来自另一个程序集的版本存在于 VersionInfo 表中,FluentMigrator 将如何处理这个?它会在我面前抛出错误,还是因为当前程序集对它一无所知而只是忽略该行?
也欢迎其他关于以这种方式使用 FluentMigrator 的评论(一个数据库有多个程序集)。
我正在使用 FluentMigrator 在 SQL Server 2014 数据库上进行数据库迁移。如果我使用重命名构建器来重命名表,如下所示:
Rename.Table("Old Name").To("NewName");
Run Code Online (Sandbox Code Playgroud)
然后我是否需要删除并重新创建引用表旧名称的任何外键,或者 SQL(或 FM)是否知道更新引用?
我创建了一个新的公共类 M203_InsertPercent ,它将根据 SQL 语句将数据插入数据库。当我使用连接字符串运行 Migrate.exe 时,程序集 FluentMigrator.Console 返回“未找到迁移”。我查看版本表中的数据库,但我的类名不在该表中。我有什么遗漏的吗?
我使用此代码来创建外键:
Create.ForeignKey("FK_Table1_Table2")
.FromTable("Table1").ForeignColumn("Table1_ID")
.ToTable("Table2").PrimaryColumn("Table2_ID");
Run Code Online (Sandbox Code Playgroud)
结果我有一对多的关系:
public class Table1
{
public int Table1_ID { get; set; }
public virtual Table2 Table2 { get; set; }
}
public class Table2
{
public Table2()
{
this.Tables1 = new HashSet<Table1>();
}
public int Table2_ID { get; set; }
public virtual ICollection<Table1> Tables1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但我想看到:
public class Table2
{
public int Table2_ID { get; set; }
public virtual Table1 Table1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 FluentMigrator 来做到这一点?
我正在尝试将默认值 NewGuid() 设置为 MySQL 5.7 中的 UUID/GUID 列(在 .Net Core 中使用 FluentMigrator)。
Create.Table("table")
.WithColumn("auto_guid").AsGuid().NotNullable().WithDefaultValue(SystemMethods.NewGuid)
Run Code Online (Sandbox Code Playgroud)
根据 Fluent Migrator文档,应该支持 NewGuid,但出现错误:
“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法……”
我搜索了任何类似的问题和解决方案,但找不到任何。
使用 Fluent Migrator 是否可以在 MySQL 中自动生成 UUID/GUID?
fluent-migrator ×10
c# ×6
mysql ×2
.net ×1
asp.net-core ×1
db-first ×1
guid ×1
sql-server ×1
unit-testing ×1
uuid ×1