通过IQueryable<T>获得DbContext
来源:互联网 发布:江西年夜饭事件知乎 编辑:程序博客网 时间:2024/05/10 03:31
/*废话不多说直接上代码*/using System;using System.Data.Entity;using System.Data.Entity.Core.Objects;using System.Data.Entity.Infrastructure;using System.Data.Entity.Infrastructure.Interception;using System.Linq;using System.Reflection;namespace Lomeo.EntityFramework.Extensions{ public static class Efext { public static DbContext GetContext<TEntity>(this IQueryable<TEntity> query) where TEntity : class { if (!(query is ObjectQuery<TEntity> objectQuery)) { if (!(query is DbQuery<TEntity> dbQuery)) { throw new Exception("未能从IQueryable表达式找到DbContext。您确定此表达式来自Ef DbContext吗?"); } var propers = dbQuery.GetType().GetProperty("InternalQuery", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (propers == null) { throw new Exception("未能从IQueryable表达式找到DbContext。您确定此表达式来自Ef DbContext吗?"); } var obj = propers.GetValue(dbQuery, null); propers = obj.GetType().GetProperty("ObjectQuery", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (propers == null) { throw new Exception("未能从IQueryable表达式找到DbContext。您确定此表达式来自Ef DbContext吗?"); } objectQuery = propers.GetValue(obj, null) as ObjectQuery<TEntity>; if (objectQuery == null) { throw new Exception("未能从IQueryable表达式找到DbContext。您确定此表达式来自Ef DbContext吗?"); } } return objectQuery.Context.GetDbContext(); } private static DbContext GetDbContext(this ObjectContext objc) { if (!(objc.GetType().GetProperty("InterceptionContext", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.GetValue(objc, null) is DbInterceptionContext interceptionContext)) return null; return interceptionContext.DbContexts.FirstOrDefault<DbContext>(); } }}
阅读全文
0 0
- 通过IQueryable<T>获得DbContext
- 返回 IQueryable<T> OR List<T>
- IQueryable<T>和IEnumerable<T>的区别
- IEnumerable<T>和IQueryable<T>区分
- DbContext
- Understanding the implications of IQueryable<T>
- List<T> 和IQueryable<T>关键性的不同在哪?
- 大话 IQueryable和IEnumberable and IList与Lis t区别
- Entity Framework中使用IEnumerable<T>、IQueryable<T>及IList<T>的区别
- 建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>
- 如何通过T-SQL获得当前连接的客户端的IP和机器名...
- 如何通过T-SQL获得当前连接的客户端的IP和机器名
- IQueryable<T>绑定到Repeater,执行Repeater_ItemDataBound事件时,遇到的问题及解决办法
- 再讲IQueryable<T>,揭开表达式树的神秘面纱
- dbcontext 学习
- (Relax DP1.2)UVA 10910 Marks Distribution(求通过n门课获得t分的情况数,每门课至少能获得p分)
- 通过域名获得IP
- 通过身份证获得户籍
- 南邮汇编实验——汇编语言实现用户的登录,不回显密码
- oracle删除分区、子分区,元数据和和只清除分区、子分区数据sql
- 优秀前端站点收藏
- statement transaction required more than 'max_binlog_cache_size' bytes of storage
- 【Linux】Shell编程基础
- 通过IQueryable<T>获得DbContext
- 计算机为什么没有三维指针的实现,都是一维指针来操作。
- 数据挖掘学习------------------1-数据准备-2-数据质量分析
- Linux sort命令示例
- 科大讯飞语音开发包上手体验(1)
- C# 加载Shp文件到MapControl控件
- syscall.c
- 3、Linux软件包管理
- js中 if不判断解决方式