【发布时间】:2012-11-08 17:49:10
【问题描述】:
我正在使用带有代码优先方法的 EF 5。
我无法将列的默认 DateTime 值设置为 (getdateutc())
我想要做的是让 EF 设置具有指定此值的表,而我发现可能的唯一方法是使用 DbMigrations(向上和向下方法)。还有其他方法吗?
我有一个像这样的基类
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; }
}
还有一堆继承自它的类。
我想做的是能够在 DBMigrations Up 方法中访问模型(使用fluentAPI 进行映射),并在那里编写一个循环来处理从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);
【问题讨论】:
-
C# 类名应为 UpperCamelCase。
-
我也这么认为!告诉我们的建筑师:)
标签: c# .net entity-framework ef-code-first