【问题标题】:Is it possible to extent FluentApiMapper to set the default value ?是否可以扩展 FluentApiMapper 设置默认值?
【发布时间】:2012-11-08 18:13:18
【问题描述】:

我正在使用 EF 5 Code Fist 并使用 fluent API 指定一些自定义对象到表的映射。像这样的:

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);

我想做的是添加一个允许添加的扩展

 .HasDefaultValue('(getdateutc()');

这可能吗?有什么想法吗?

【问题讨论】:

  • 您可以简单地使用 POCO 类的构造函数来初始化具有默认值的新对象。
  • 你能举个例子来说明如何做到这一点吗?
  • @JoeFrambach 你的类在哪里被定义做这样的事情- public class ACCOUNT { public ACCOUNT() { Created = DateTime.Now; } 公共日期时间创建 { 获取;放; } } - 这被称为类的默认构造函数。也可以使用可用于创建新对象的参数创建重载构造函数。

标签: .net entity-framework c#-4.0 ef-code-first


【解决方案1】:

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

更长的答案是:不。第二好的(但远远落后)是使用数据库初始化程序向数据库发送 DDL 查询:

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

【讨论】:

  • 嗯,这是一个解决方案。有什么想法可以找到所有对象以及它们映射到的表的名称吗? stackoverflow.com/questions/13294780/…
  • 应该很简单,但不是。映射信息深埋在 MetadataWorkspace 中。我希望有一天会改变。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2019-08-24
    • 2014-10-15
    • 2021-07-22
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多