获取模型更新Id

时间:2012-06-07 13:51:16

标签: c# entity-framework orm

在实体框架中,当您提交新项目时,它不会根据数据库更新其ID。例如:

public class A  {
    public int Id {get; set;}
    public DateTime LastUpdateUtc {get; set;}
}

现在,当我向我的存储库添加新的A时:

A a = new A();
a.LastUpdateUtc = DateTime.UtcNow;
repo.Add(a);
repo.SaveChange();
a.Id; // still == 0

即使我在我的存储库中搜索元素,我也会获得A但是Id仍然等于0。

A a = repo.Asquerable().OrderByDescending(a => a.LastUpdateUtc ).First();
a.Id; // still == 0

有人知道我如何告诉实体框架从数据库计算的内容更新Id feild?

由于

4 个答案:

答案 0 :(得分:0)

如果您的ID列具有AUTONUMBER属性,则实体框架将自动从数据库中检索新的自动生成的ID字段。您是否查看了数据库以确保您的ID数据实际上不是0?

答案 1 :(得分:0)

请试试这个

public override TR Create<T, TR>(T entity)
{
    string entitySet = GetEntitySetName<T>();
    _context.AddObject(entitySet, entity);
    _context.SaveChanges();

    //Returns primaryKey value
    return (TR)context.CreateEntityKey(entitySet, entity).EntityKeyValues[0].Value;                       
} // Where T: entity type, TR: entity PK type

如果没关系 - 请看一下EF Generic Repository get Id from new inserted generic entity

答案 2 :(得分:0)

而不是

A a = repo.Asquerable().OrderByDescending(a => a.LastUpdateUtc ).First();
a.Id;

A queryA = repo.Asquerable().OrderByDescending(a => a.LastUpdateUtc);
queryA.First().Id;
在这种情况下,

a是一个实体(不是查询),不会改变

答案 3 :(得分:0)

最终我通过添加属性

使其成功
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]