2013-12-08 147 views
2

我有以下的实体框架代码优先的模型类。我想在创建数据库表时为CreateTime设置默认值当前时间。但是,下面的代码不能编译,因为设置默认的DateTimeOffset值?

类型“System.DateTimeOffset”不能被声明为const

它是一个更好的办法来设置默认值DateTimeOffset

public class MyClass 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    [DefaultValue(now)] 
    public DateTimeOffset CreateTime 
    { 
     get { return _createTime; } 
     set { _createTime = value; } 
    } 

    private const DateTimeOffset now = DateTimeOffset.Now; 
    private DateTimeOffset _createTime = now; 
} 
+0

你有意试图“冻结”现在到它被设置的时刻吗? –

+0

'DateTimeOffset'是具有'Offset'属性的'DateTime'。你不能用'const'来使用它,因为大多数_primitive types_可以与它一起使用。 http://social.msdn.microsoft.com/Forums/vstudio/en-US/9e7f1929-9ea2-487c-a037-628dc3c4fb38/the-type-systemdatetime-cannot-be-declared-const –

回答

2

我想这样做,你需要什么是最好的方法是重写SaveChanges方法在DbContext

public class MyDbContext : DbContext 
{ 
    public override int SaveChanges() 
    { 
     foreach (var entry in this.ChangeTracker.Entries<MyClass>().Where(x => x.State == EntityState.Added)) 
     { 
      entry.Entity.CreateTime = DateTimeOffset.Now; 
     } 

     return base.SaveChanges(); 
    } 
} 
+0

如何使用以下内容班级代码? 'public DateTimeOffset CreateTime {get {return _createTime; } set {_createTime = value; }} private DateTimeOffset _createTime = DateTimeOffset.Now;'? – ca9163d9

+0

@ dc7a9163d9从理论上说,构建完课程之后,可能需要很长时间。记住'_createTime'在设置值后不会改变。 –