2012-10-06 72 views
2

我使用EF Code First將我的項目運行得很好。但是現在我需要在DB中添加1個字段(例如類型爲DateTime的CreateDate),該字段可以爲null。映射可空類型代碼優先

所以,我寫劇本到1以上字段添加到DB(CREATEDATE(日期時間)),然後我修改我的模式,包括新的領域

public class Account() 
{ 
... 
public DateTime CreateDate { get; set; } 
} 

及以下,使這個代碼

:使用FluentApi

Property(x => x.CreateDate).IsOptional(); 

問題是,當我試圖讓帳戶的任何實例字段選項,當我修改字段如下我得到了一個錯誤

public DateTime? CreateDate { get; set; } 

然後它工作。

你們能向我解釋一下嗎?爲什麼我的流利api不工作,或者我做錯了什麼?

謝謝。

回答

3

你已經給了你的問題的解決...... :)你必須聲明新的屬性爲:

public DateTime? CreateDate { get; set; } 

DateTime?是一個nullable type和手段,CreateDate可以爲空。

這是必要的,因爲當從數據庫中提取記錄並且其CreateDateNULL時,模型上的支持屬性應該接受null作爲可能的值。如果您聲明該屬性僅爲DateTime CreateDate,則該框架會向您提供錯誤信息,告知它無法將NULL值分配給不接受NULL的屬性。

所以,你應該有:

public class Account() 
{ 
    ... 

    public DateTime? CreateDate { get; set; } 
} 
+1

感謝您的回覆,所以什麼是fluentapi對於? –

+1

Fluent API語句'Property(x => x.CreateDate).IsOptional(); '會照顧在DB端創建一個可爲空的CreateDate列。 –

4

嘗試基於這個例子:

public class Student 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Family { get; set; } 
    public string Phone { get; set; } 
    public DateTime Birthday { get; set; } 
} 

的DbContext和流利的API:

public class dbMvc1:DbContext 
{ 
    public DbSet<Student> Student { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Student>().Property(x => x.Birthday).IsOptional(); 
    } 
}