Code First Approach で EF 5 を使用しています。
DateTime
列のデフォルト値を(getdateutc())
私がやりたいのは、この値を指定して EF にテーブルを設定させることです。それが可能であることがわかった唯一の方法は、DbMigrations
(Up メソッドと Down メソッド) を使用することです。他の方法はありますか?
私はこのような基本クラスを持っています
public abstract class BASE_AUDITED : BASE
{
[IgnoreDataMember, IgnoreMap]
public DateTime Created { get; set; }
[IgnoreDataMember, IgnoreMap]
public DateTime Modified { get; set; }
[MaxLength(50)]
[IgnoreDataMember, IgnoreMap]
public string CreatedBy { get; set; }
[MaxLength(50)]
[IgnoreDataMember, IgnoreMap]
public string ModifiedBy { get; set; }
}
public abstract class BASE
{
[IgnoreMap]
public int id { get; set; }
}
そして、それを継承する一連のクラス。私がやりたいことはfluentAPI
、DBMigrations Up メソッドで (マッピングに使用して) モデルにアクセスし、そこにループを記述して、継承するすべてのオブジェクトを処理できるようにすることです。Base_audited
つまり、追加するすべてのオブジェクトに対して次のコードを記述しないようにしています。
AlterColumn("T70_AccountService.CONTACT", "TestClmn", c => c.DateTime(nullable: false, defaultValueSql: "(getutcdate())"));
しかし、むしろこのようなsmthを持っています
var types = ReflectionHelper.TypesImplementingInterface(typeof (BASE_AUDITED));
foreach (var type in types)
{
var tableName = Context.FindTableNameFor(type);
AlterColumn(tableName , "Created", c => c.DateTime(nullable: false, defaultValueSql: "(getutcdate())"));
AlterColumn(tableName , "Modified", c => c.DateTime(nullable: false, defaultValueSql: "(getutcdate())"));
}
要するに、DbMigrations Up メソッドでオブジェクトがマップされているテーブルを見つけることができません。
var tableName = Context.FindTableNameFor(type);