2012-06-07 32 views
-2

在实体框架中,当您提交新项目时,它不会根据数据库更新其ID。例如:获取模型更新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 

即使我搜索我的库中的eleement我得到一个A,但该标识仍然等于0

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

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

感谢

+0

是ID列的数据库或没有标识列?一个int默认为0,所以这就是为什么它总是0--你没有设置它。 – Arran

+0

是的,它是我的数据库中的Id – mathk

回答

0

最终我没有让它通过添加attirbute工作:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
0

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

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

0

而不是

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

尝试

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

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