2013-12-08 148 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'在設置值後不會改變。 –