EF 可以通过 db.Set<Order>().Find(12) 获取实体,但如何反过来通过实体获取 Key 呢?
因为做了一个通用的功能,传来的实体是 object 类型,可能是 Order 也可能是 Product 还可能是其它的。
试试下面扩展方法:
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 }
没严格测试,自己再调整下好了。
谢谢鹤兄!
强制转换为Order类型或Product类型后再获到
其它类型呢,项目里面的几十个类型,以后还会新增加。
你是来骗分的吧!
@dotnet4: EF基本上没有你这么用的,你这么用的话性能根本跟不上的,建议换个思路实现
@天行健 自强不息: 一次用户请求只会调用一次,不是系统瓶颈,性能不是问题,不需要考虑。
再说了,EF 就是通过 EntityKey 来确定外键引用和跟踪对象变化的。