我将 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())"));
而是有这样的东西
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);