首页 新闻 搜索 专区 学院

EntityFramework 如何获取实体的 Key

0
悬赏园豆:20 [已解决问题] 解决于 2011-11-02 08:45

EF 可以通过 db.Set<Order>().Find(12) 获取实体,但如何反过来通过实体获取 Key 呢?

因为做了一个通用的功能,传来的实体是 object 类型,可能是 Order 也可能是 Product 还可能是其它的。

dotnet4的主页 dotnet4 | 初学一级 | 园豆:16
提问于:2011-10-31 18:40
< >
分享
最佳答案
0

试试下面扩展方法:

1 public static class DbContextExtensions {
2 public static EntityKey GetEntityKey(this DbContext context, object entity) {
3 var adapter = context as IObjectContextAdapter;
4 var entry = adapter.ObjectContext.ObjectStateManager.GetObjectStateEntry(entity);
5 return entry.EntityKey;
6 }
7 }

没严格测试,自己再调整下好了。

收获园豆:19
鹤冲天 | 老鸟四级 |园豆:2379 | 2011-11-01 21:17

谢谢鹤兄!

dotnet4 | 园豆:16 (初学一级) | 2011-11-02 08:45
其他回答(1)
-1

强制转换为Order类型或Product类型后再获到

收获园豆:1
artwl | 园豆:16536 (专家六级) | 2011-10-31 20:17

其它类型呢,项目里面的几十个类型,以后还会新增加。

你是来骗分的吧!

支持(0) 反对(0) dotnet4 | 园豆:16 (初学一级) | 2011-10-31 22:38

@dotnet4: EF基本上没有你这么用的,你这么用的话性能根本跟不上的,建议换个思路实现

支持(0) 反对(0) artwl | 园豆:16536 (专家六级) | 2011-10-31 22:43

@天行健 自强不息: 一次用户请求只会调用一次,不是系统瓶颈,性能不是问题,不需要考虑。

再说了,EF 就是通过 EntityKey 来确定外键引用和跟踪对象变化的。

支持(0) 反对(0) dotnet4 | 园豆:16 (初学一级) | 2011-11-01 15:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册