2017-01-16 1 views
0

У меня есть таблица со столбцом [CreatedAtIsoUtc], который устанавливает Sql значениеПереопределение значение SQL по умолчанию при вставке с помощью Entity Framework сердечника (7)

migrationBuilder.CreateTable(
      name: "CurrentAccountLedger", 
      columns: table => new 
      { 
       Id = table.Column<Guid>(nullable: false, defaultValueSql: "newsequentialid()"), 
       CreatedAtIsoUtc = table.Column<DateTime>(nullable: false, defaultValueSql: "GETUTCDATE()"),      
      } 

     }); 

Сервер по умолчанию В качестве исходного запроса SQL Server, можно вставить запись и перезаписать значение [CreatedAtIsoUtc] по умолчанию.

В Entity Framework я не могу перезаписать это значение при выполнении операции Add().

Любые идеи о том, как я могу заставить это работать?

ответ

3

На самом деле в EF Основной v1.1.0 вы можете сделать это, установив свойство на любое значение отличается, чем по умолчанию для типа (т.е. 0 для номеров, false для bool, null для string и типов с нулевым значением, default(DateTime) в вашем случае). Единственное ограничение тока является то, что вы не можете изменить значение по умолчанию SQL с 0, false, null и т.д.

Например

db.CurrentAccountLedger.Add(new CurrentAccountLedger { }); 

вставит запись с CreatedAtIsoUtc равна по умолчанию GETUTCDATE(), в то время как

db.CurrentAccountLedger.Add(new CurrentAccountLedger { CreatedAtIsoUtc = new DateTime(2017, 1, 1) }); 

вставляет запись с указанным значением.

+0

Спасибо. Я изначально пробовал это, но он почему-то не работал. Просто повторился, и он работает. Не знаю, где я испортился. –

+0

Означает ли это, что с нулевым значением EfCore НЕ может быть вставлено в столбец с нулевым значением, который имеет значение по умолчанию: http://stackoverflow.com/questions/41969303/ef-core-insert-null-value-to-nullable-column- that-has-default-value – borisdj

+0

@Boris Действительно ('null' для строковых и ** нулевых типов **) –

1

Вы можете установить исходные значения по умолчанию SQL на ваших объектах в контексте OnModelCreating()-х с помощью HasDefaultValueSql():

class YourContext : DbContext 
{ 
    public DbSet<CurrentAccountLedger> CurrentAccountLedgers { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<CurrentAccountLedger>() 
      .Property(x => x.CreatedAtIsoUtc) 
      .HasDefaultValueSql("GETUTCDATE()"); 
    } 
} 
Смежные вопросы