由数据库生成的CreatedDate和AmendDate

时间:2011-10-12 13:42:21

标签: entity-framework-4.1 ef-code-first code-first

用户类:

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

我需要列CreatedDateAmendDate具有数据库生成的值(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 个答案:

答案 0 :(得分:1)

您可以使两列都为空,并使用空值保存两列的更改。您还需要在数据库的相关列中将列的默认值设置为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();
}