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方法,如需转载请自行联系原博主。

目录
相关文章
|
28天前
|
测试技术 uml
#如何画好架构图:7种常用类型与示例
【10月更文挑战第12天】 架构图是展示系统结构和组件之间关系的图形表示,它对于理解系统的组织和设计至关重要。在不同的上下文中,架构图的类型和细节会有所不同。以下是7种常用的架构图类型及其示例:
80 2
|
1月前
|
前端开发 JavaScript
掌握微前端架构:构建现代Web应用的新方法
本文介绍了微前端架构的概念及其在现代Web应用开发中的优势与实施方法。微前端架构通过将应用拆分成独立模块,提升了开发效率和灵活性。其核心优势包括技术栈灵活性、独立部署、团队协作及易于维护。文章详细阐述了定义边界、选择框架、管理状态和通信等关键步骤,并讨论了状态同步、样式隔离及安全性等挑战。微前端架构有望成为未来Web开发的重要趋势。
|
1月前
|
存储 边缘计算 人工智能
深入理解云计算:架构、类型与未来趋势
【10月更文挑战第6天】深入理解云计算:架构、类型与未来趋势
78 0
|
4月前
业务架构问题之什么是自上而下和自下而上的设计方法
业务架构问题之什么是自上而下和自下而上的设计方法
159 18
|
3月前
|
存储 NoSQL 索引
MPP架构数据仓库使用问题之在ORC文件中,String类型字段是怎么进行编码的
MPP架构数据仓库使用问题之在ORC文件中,String类型字段是怎么进行编码的
|
3月前
|
NoSQL Serverless 数据库连接
Serverless 架构实现弹幕场景问题之initializer方法在执行过程中遇到错误如何解决
Serverless 架构实现弹幕场景问题之initializer方法在执行过程中遇到错误如何解决
36 0
|
3月前
|
存储 Serverless API
Serverless 架构实现弹幕场景问题之在initializer方法中初始化数据库实例如何解决
Serverless 架构实现弹幕场景问题之在initializer方法中初始化数据库实例如何解决
28 0
|
3月前
|
Android开发
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
38 0
|
3月前
|
Java 测试技术 Android开发
Android项目架构设计问题之使用反射调用类的私有方法如何解决
Android项目架构设计问题之使用反射调用类的私有方法如何解决
29 0
|
3月前
|
存储 安全 数据库
云计算:架构、类型及其优缺点
【8月更文挑战第20天】
546 0