EF架构~为ObjectContext类型加个Find方法

简介:

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月前
|
架构师 测试技术 Linux
嵌入式软件架构中抽象层设计方法
嵌入式软件架构中抽象层设计方法
43 0
|
2月前
|
SQL 分布式计算 Hadoop
Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
【2月更文挑战第6天】Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
79 0
|
5月前
|
设计模式 编译器 Go
掌握Go类型内嵌:设计模式与架构的新视角2
掌握Go类型内嵌:设计模式与架构的新视角
30 0
|
5月前
|
设计模式 Cloud Native JavaScript
掌握Go类型内嵌:设计模式与架构的新视角1
掌握Go类型内嵌:设计模式与架构的新视角
41 0
|
1月前
|
中间件 编译器 调度
嵌入式软件架构基础设施设计方法
嵌入式软件架构基础设施设计方法
64 0
|
8天前
|
安全 Shell 网络安全
抄个冷板凳---x86架构MS-17010漏洞的多重利用方法
x86架构永恒之蓝漏洞的多重利用复现演示
|
8月前
|
存储 架构师 NoSQL
一口气讲完数据仓建模方法--数据仓库架构师碎碎念
一口气讲完数据仓建模方法--数据仓库架构师碎碎念
|
11月前
|
人工智能 架构师 安全
【企业架构】现代企业架构方法——第 3 章
【企业架构】现代企业架构方法——第 3 章
|
11月前
【SOGAF】SOGAF架构类型/模式
【SOGAF】SOGAF架构类型/模式
|
11月前
|
机器学习/深度学习 人工智能 文件存储
AAAI 2023 | 打破NAS瓶颈,新方法AIO-P跨任务预测架构性能
AAAI 2023 | 打破NAS瓶颈,新方法AIO-P跨任务预测架构性能