鉴于以下迁移:
[Migration(1)]
public class Mig001 : Migration
{
public override void Up()
{
Alter.Table("foo").AlterColumn("bar").AsInt32().Nullable();
}
public override void Down()
{
Alter.Table("foo").AlterColumn("bar").AsInt32().NotNullable();
}
}
Run Code Online (Sandbox Code Playgroud)
迁移器更改列并使其可为空,并且在回滚时它会执行相反操作并使其不再可为空.
让我们说foo自迁移以来已经添加了数据; 现在列中有null的bar行.
如果它被回滚然后操作将失败,在fluentmigrator中是否有办法处理这种情况?或者什么是最佳实践.
有人可以解释迁移者(特别是流利者)的概念吗?
以下是我在这个问题上收集到的(可能是混乱的)事实:
它是一种通过版本控制最初创建然后维护数据库更新的方法.
第一个迁移(或数据库的初始版本)将包含所需的所有表,关系和属性(流畅地完成或在脚本中使用一大块sql).
如果要将更改推送到数据库,可以创建新的迁移方法(向上和向下),例如添加新表或修改字段.
要部署其中一个迁移,您将使用命令行指定包含迁移的dll,连接字符串和所需的版本.
如果您有一组相当复杂的数据模型,那么为所有这些模型创建迁移定义会不会相当困难和耗时?
我知道使用nHibernate/fluent,您可以轻松地为数据库生成表,而无需定义除模型和映射文件之外的任何内容.有没有办法使这个配置与Migrator/Versioning兼容?
当nhibernate/fluent负责生成数据库时,我不一定需要定义表的每个方面.它通过约定或映射文件完成.有了迁移器,我需要定义这个级别的细节吗?
让我们说我有一节课:
public class foo
{
public string bar
{
get { return "A Value"; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果我只想访问bar中包含的值,并且我对实际的类不感兴趣,我可以执行以下操作:
string value = new foo().bar;
Run Code Online (Sandbox Code Playgroud)
这真的是获取价值的最佳方式吗?我不想让这个属性(和类)静态.
如果我有很多关于我想访问的bar属性的类,是否会有更通用的方法呢?
编辑:它不是静态的原因是它被覆盖的属性,我相信它不能是静态的:
public class parent
{
public abstract string bar { get; }
}
public class foo : parent
{
public override string bar
{
get { return "A Value"; }
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含所有模型类的项目,其中包含一个包含MVC 4 Web应用程序的单独项目(服务,存储库层也是如此).
如果我想为我的模型属性使用MVC特定数据注释,我如何在不依赖MVC的情况下执行此操作?
任何引用该模型的非MVC项目也需要MVC引用.我希望这些仅在MVC使用模型时添加,而不是所有内容.
最初我在考虑部分课程,但我知道这些不能用于跨组装.
制作克隆类并从模型类之外的原件继承可能不起作用.它需要代码引用这些子类而不是原始类.
我更喜欢以更不引人注目的方式将属性附加到模型中.