如何利用entityKey从Entity User记录提取数据库Int类型Id?
提取Entity User的Int类型ID解决方案
嘿,我刚好处理过类似的场景,用EntityKey来提取Int类型ID其实挺直接的,给你两种常用的实现方式,还有一些注意事项:
方法1:直接解析EntityKey(适用于EF早期版本)
如果你的项目用的是ObjectContext或者EF 4.x及更早的版本,可以直接从EntityKey的EntityKeyValues数组中提取主键值:
// 假设user是你已有的User实体实例 if (user.EntityKey != null && user.EntityKey.EntityKeyValues.Length > 0) { int userId = (int)user.EntityKey.EntityKeyValues[0].Value; // 现在userId就是数据库对应的Int类型ID了 }
说明:EntityKeyValues数组存储了实体的所有主键字段(如果是复合主键会有多个元素),通常单一主键的情况下第一个元素就是你的Id字段,直接转成int即可。
方法2:用DbContext的Entry方法(EF 5+推荐)
如果是用DbContext的现代EF版本,用Entry方法会更简洁,甚至支持强类型避免硬编码字段名:
using System.Data.Entity; // 假设db是你的DbContext实例 // 方式1:硬编码字段名(适合不确定属性名的情况) int userId = (int)db.Entry(user).Property("Id").CurrentValue; // 方式2:强类型访问(更安全,推荐) int userId = db.Entry(user).Entity.Id;
额外注意事项
- 如果实体还没被上下文跟踪(比如是手动创建的实例,还没保存到数据库),
EntityKey会是null,这时候需要先把实体附加到上下文:db.Users.Attach(user); // 之后再获取ID - 如果你不确定主键字段的名称,可以遍历
EntityKeyValues来确认:foreach (var keyItem in user.EntityKey.EntityKeyValues) { Console.WriteLine($"主键字段名:{keyItem.Key},值:{keyItem.Value}"); }
内容的提问来源于stack exchange,提问作者Qwertie
相关产品推荐
相关产品推荐

