CreatedDate и AmendDate, сгенерированные базой данных - PullRequest
1 голос
/ 12 октября 2011

Класс пользователя:

public class User
{
    public DateTime CreatedDate { get; private set; }
    public DateTime? AmendDate { get; private set; }
}

Мне нужны столбцы CreatedDate и AmendDate со значениями, сгенерированными базой данных (команда now())

Читая некоторые статьи в интернете, посоветовал мне использовать это в DbContext классе по OnModelCreating методу:

Property(p => p.CreatedDate)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

Property(p => p.AmendDate)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

но не работает, говоря что ошибка is supported types are rowversion and timespan.

Как вы поступаете с этими типами недвижимости?

Любые советы?

1 Ответ

1 голос
/ 12 октября 2011

Вы можете сделать оба столбца обнуляемыми и сохранить изменения с обоими столбцами с нулевыми значениями.Вам также необходимо установить значение по умолчанию для столбца как getdate() в соответствующем столбце в базе данных.Тогда эти столбцы будут автоматически заполнены текущей датой, если вы попытаетесь вставить нулевые значения.Но EF не будет обновлять свойство с использованием значения даты, сгенерированного базой данных.

Другое решение - установить значения перед вызовом метода SaveChanges()

public override int SaveChanges()
{
    var changeSet = ChangeTracker.Entries<User>();

    if (changeSet != null)
    {
        foreach (var entry in changeSet
       .Where(c => c.State == EntityState.Added || c.State == EntityState.Modified))
        {
            entry.Entity.CreatedDate = entry.Entity.AmendDate = DateTime.Now;
        }
    }
    return base.SaveChanges();
}
...