EF中如何在DbContext上直接使用Find与Find<T>方法?
解答
可行性结论
完全可行。DbContext层面的Find系列方法和你常用的DbSet.Find()底层逻辑完全一致,都会优先查询上下文本地的跟踪缓存,缓存未命中时才会访问数据库,最终返回结果、执行性能没有任何差异。
具体使用方式
假设你要查询主键为1的User实体,两种调用方式如下:
- 泛型版本(日常开发最常用)
// 直接通过DbContext调用 var user = ctx.Find<User>(1); // 等价于你熟悉的DbSet调用方式 var user = ctx.Users.Find(1);
- 非泛型版本(仅用于实体类型需要动态确定的场景)
// 第一个参数传入实体类型,返回值需要自行强转 var user = (User)ctx.Find(typeof(User), 1);
补充说明
大家平时习惯用DbSet调用Find,只是因为不需要显式写泛型参数,写法更简洁,没有其他特殊原因。
内容的提问来源于stack exchange,提问作者Konrad Viltersten
相关产品推荐
相关产品推荐

