-2

在实体框架中,当您提交一个新项目时,它不会根据数据库更新他的 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 字段吗?

谢谢

4

4 回答 4

0

代替

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

尝试

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

a在这种情况下是一个实体(不是查询)并且不会改变

于 2012-06-07T14:16:21.173 回答
0

最终,我确实通过添加属性使它起作用:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
于 2012-11-23T10:23:44.343 回答
0

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

于 2012-06-07T14:04:08.853 回答
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 insert generic entity

于 2012-06-07T14:04:53.237 回答