【问题标题】:Code first POCO design Entity Identity is not working代码优先 POCO 设计实体身份不起作用
【发布时间】:2012-12-01 19:16:27
【问题描述】:

我正在使用 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();

当我需要写入数据库时​​:

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。

但这不会发生。 请指教我做错了什么? 谢谢。

【问题讨论】:

    标签: entity-framework linq-to-entities code-first poco


    【解决方案1】:

    您需要调用 db.SaveChanges() 才能将其保存到数据库中。

    【讨论】:

    • 是的,我知道。但我的问题不是关于如何保存数据。我需要知道只有在调用 db.SaveChanges() 之后或之前,当我将实体添加到实体集合中时,标识值才会增加:db.Respondents.Add(survey.Respondent); ???
    • 只有在调用 SaveChanges 后才会增加。直到你称它实际上不是数据库的一部分。
    • 身份由数据库生成,不是EF。您必须调用 db 才能获取它。
    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2013-05-09
    • 2017-11-08
    相关资源
    最近更新 更多