回到目录

ObjectContext作为entity framework的最原始的数据上下文对象,它的操作都是具有原始性的,没有被封闭过的,这也就难免在有些功能上欠缺一点,用过DbContext作为EF数据上下文的同学一定有留意到它的Find<TEntity>(params object[] keyValues)方法,不错,它确实比较方便,通过主键(可以是复合主键)来查找实体,这个功能在ObjectContext对象上是没有被提供的,所以,我把这个功能在ObjectContext上实现了一下,现在分享给各位:

 1   /// <summary>
 2         /// 根据主键得到一个实体
 3         /// </summary>
 4         /// <typeparam name="TEntity"></typeparam>
 5         /// <param name="id"></param>
 6         /// <returns></returns>
 7         public virtual TEntity GetEntity<TEntity>(params object[] id) where TEntity : class
 8         {
 9             var count = 0;
10             List<PropertyInfo> res_Primary = new List<PropertyInfo>();
11             List<EntityKeyMember> keyMemberList = new List<EntityKeyMember>();
12             PropertyInfo[] properties = typeof(TEntity).GetProperties();
13             foreach (PropertyInfo pI in properties)
14             {
15                 System.Object[] attributes = pI.GetCustomAttributes(true);
16                 foreach (object attribute in attributes)
17                 {
18                     if (attribute is EdmScalarPropertyAttribute)
19                     {
20                         if ((attribute as EdmScalarPropertyAttribute).EntityKeyProperty && !(attribute as EdmScalarPropertyAttribute).IsNullable)
21                             keyMemberList.Add(new EntityKeyMember(pI.Name, id[count]));
22                         count++;
23                     }
24
25                 }
26             }
27             return _db.GetObjectByKey(new EntityKey(_db.DefaultContainerName + "." + typeof(TEntity).Name, keyMemberList)) as TEntity;
28
29         }

术语说明:ObjectSet<T> 相当于是表的结果集,在DbContext环境中叫DbSet<T>

EntityContainerName:EDMX所使用的容器名称

EntityKey:在EF中叫实体键,也叫主键,一个EntityKey叫容器名和一个字典串组成

回到目录

EF架构~为ObjectContext类型加个Find方法相关推荐

  1. EF架构~为分组添加位运算聚合方法

    回到目录 我们知道在Linq里的分组groupby可以对集合中一个或者多个字段进行分组,并对其中一个属性进行聚合,而Linq为我们提供了多种聚合方法,由aver,sum,count等,而在大叔权限体系 ...

  2. EF架构~为EF DbContext生成的实体添加注释(T4模板应用)

    相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回  EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回  EF架构~为EF DbConte ...

  3. EF架构~DefaultValue让我的UnitOfWork更可读

    在编程世界里,使用"否定式"不是一件好事,因为它的可读性并不高,但有时,为了让使用者减少代码量,还是使用了双重否定,直到DefaultValue的出现,它改变了这一切,它可以为你的 ...

  4. EF架构~单表一对多集合的插入(树型结构)

    单表一对多关系很常见,它是一种树形结构,如系统菜单表,部门表,分类表,这些都可以做成单表一对多关系,而这些表做成一对多关系后,如果通过EntityFramework进行插入操作时,会很方便,EF会自动 ...

  5. 【EF学习笔记07】----------加载关联表的数据 贪婪加载

    [EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...

  6. 《三层架构之抽象工厂加反射》纠错

    每当别人问我关于三层的知识的时候我总是推荐自己的<三层架构之抽象工厂加反射>这篇博客.这篇博客是自己当时学习三层的时候写的一个简单的登录例子.这个例子通过登录这个用例简单的介绍了三层,然后 ...

  7. EF架构~将数据库注释添加导入到模型实体类中

    回到目录 相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回  EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回  EF架构~为EF Db ...

  8. MPB:中科院生态环境中心邓晔组-从环境样本中提取高质量DNA-研磨加DNeasy试剂盒方法...

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  9. java string 属性_String类型的属性和方法

    前面的话 前面已经介绍过字符串String类型的基本知识,本文将介绍String类型的属性和方法 属性 字符串String类型的每个实例都有一个length属性,表示字符串中的字符个数.由于字符串是不 ...

  10. mysql优化的几种方法_详解mysql数据库不同类型sql语句优化方法

    概述 分享一下之前笔记记录的一些不同类型sql语句优化方法,针对mysql. 主要分成优化INSERT语句.优化ORDER BY语句.优化GROUP BY 语句.优化嵌套查询.优化OR语句这几个方面, ...

最新文章

  1. ldconcig详解
  2. 用Transformer实现OCR字符识别!
  3. [Erlang 0034] Erlang iolist
  4. [转]Chrome 控制台console的用法
  5. Spring Boot实现一个天气预报系统(一)
  6. mongodb的delete_MongoDB 删除数据库
  7. js函数中的参数的个数
  8. C++描述杭电OJ 2020.绝对值排序 ||
  9. 做三维模型_这几款倾斜实景三维裸眼3D采集软件你了解吗?
  10. rdlc tablix_SQL Server中的报表–通过分组功能(由Tablix控件提供)处理数据
  11. cmake构建NNIE工程
  12. 朱有鹏嵌入式linux网盘,朱有鹏嵌入式单片机免费课程
  13. Linux驱动学习--HCI框架及源码分析
  14. Win32 API 列表5 (格式有点乱)
  15. 报表设计器——设计自己的报表
  16. native数据类型 react_react-native中使用realm数据库
  17. 精华【分布式微服务云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
  18. Dlib模型实现人脸识别
  19. 布袋除尘器--预喷涂
  20. 讨论-职场中年人,你的危机感都来源于哪里

热门文章

  1. Tensorflow:print输出控制
  2. 从bagging到dropout(deep learning笔记Ian)
  3. python 保存视频流_[宜配屋]听图阁
  4. Property “pageNumber“ was accessed during render but is not defined on instance.
  5. 力扣-135 分发糖果
  6. Android 颜色如何从十六进制如何转成八进制 + 颜色库
  7. 指定某个git的版本代码拉取新的分支
  8. LUOGU P4027 [NOI2007]货币兑换 (斜率优化+CDQ分治)
  9. python opencv 学习笔记
  10. Node.js学习入门