在实体框架中,当您提交新项目时,它不会根据数据库更新其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?
由于
答案 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)]