.net 是否可以通过扩展FluentApiMapper来设置默认值?

.net 是否可以通过扩展FluentApiMapper来设置默认值?,.net,entity-framework,c#-4.0,ef-code-first,.net,Entity Framework,C# 4.0,Ef Code First,我首先使用EF5代码,并使用fluent API指定一些自定义对象到表的映射。Smth是这样的: protected override void OnModelCreating(DbModelBuilder modelBuilder) { //Account Service modelBuilder.Entity<ACCOUNT>().ToTable("ACCOUNT", "T70_AccountService"); ... modelBuilder.E

我首先使用EF5代码,并使用fluent API指定一些自定义对象到表的映射。Smth是这样的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
   //Account Service
   modelBuilder.Entity<ACCOUNT>().ToTable("ACCOUNT", "T70_AccountService");
    ...
   modelBuilder.Entity<ACCOUNT>()
     .Property(p => p.Created).HasColumnType("DateTime")
     .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

可能吗?你知道怎么做吗

简单的回答是:不,没有API(还没有?)用于在代码中首先设置默认值

较长的答案是:否。第二个最佳方法(但远远落后)是使用数据库初始值设定项向数据库发送DDL查询:

protected override void Seed(DbContext context)
{
    context.Database.ExecuteSqlCommand(
        "ALTER TABLE [T70_AccountService] ADD DEFAULT (getutcdate()) FOR [Created]");
}

好消息,CodeFirst现在支持这一点。在生成的迁移的“Up()”方法中,使用以下语法指定默认值:

AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));

这是一个解决方案。有没有办法找到所有的对象,以及它们映射到的表的名称?应该很简单,但事实并非如此。映射信息隐藏在MetadataWorkspace的几英里深处。我希望有一天会有所改变。您可以简单地使用POCO类的构造函数以默认值初始化新对象。您可以演示一个如何执行此操作的示例吗?@JoeFrambach在定义您的类时执行类似的操作-public class ACCOUNT{public ACCOUNT(){Created=DateTime.Now;}public DateTime Created{get;set;}-这称为类的默认构造函数。还可以使用参数创建重载构造函数,您可以使用这些参数创建新对象。
AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));