2012-12-13 23 views
1

我正在使用POCO編寫代碼優先實體框架應用程序。 這裏被簡化的版本:代碼優先POCO設計實體標識不起作用

我定義這個實體:

public class Respondent 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int RespondentId { get; set; } 

    [Display(Name = "Your Name")] 
    public string Name { get; set; } 
} 

這種實體被用來創建一個表:

public class MyContext : DbContext 
{ 
    public DbSet<Respondent> Respondents { get; set; } 
} 

我還定義了包含該實體視圖模型:

public class SurveyModel 
{ 
    public Respondent Respondent { get; set; } 
} 

現在,在代碼中:

var survey = new SurveyModel(); 
survey.Respondent = new Respondent(); 

當我需要寫DB:

private MyContext db = new MyContext(); 

// HERE, after this line, SHOULD survey.Respondent.RespondentId be +1 ?? 
// Or only when I call db.SaveChanges() ?? 
db.Respondents.Add(survey.Respondent); 

此時survey.Respondent.RespondentId必須增加1,因爲它使用的是相應的屬性定義爲IDENTITY。

但它沒有發生。 請指教我做錯了什麼? 謝謝。

回答

2

您需要調用db.SaveChanges()以將其保存到數據庫中。

+0

是的,我知道。但我的問題不在於如何保存數據。 我需要知道的身份值將增加,只有當我調用db.SaveChanges()或之前,當我添加和實體的實體集合:db.Respondents.Add(survey.Respondent); ??? – monstro

+2

只有在您調用SaveChanges後纔會增加。直到你稱它實際上不是數據庫的一部分。 – IronMan84

+2

身份是由數據庫生成的,而不是EF生成的。你必須打電話給數據庫才能得到它。 – cadrell0