EntityFramework通用DbContext类,支持动态实体模型,多数据库(MySQL,SqlServer,Oracle)
EntityFramework通用DbContext类,支持动态实体模型,多数据库(MySQL,SqlServer,Oracle)
EntityFramework 简介 Entity Framework 的全称为 ADO.NET Entity Framework,简称 EF。 1、与 ADO.NET 的关系 Entity Framework(实体框架)是微软以 ADO.NET 为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早期被称为 ObjectSpace,目前 CodeOnly 功能得到更好的支持,是微软的一个 ORM 框架,其他基于 .NET 开发的 ORM 框架有 Nibernate、PetaPoco 等。 2、Entity Framework 的特点 支持多种数据库(MSSOL、Oracle、Mysql 、SQL Server 和 DB2) 强劲的映射引擎,能很好滴支持储存过程。 提供 Visual Studio 集成工具、可视化操作。 能够与 ASP.NET、WPF、WCF、WCF Data Services 进行很好的集成。 DbContext类 DbContext是实体类和数据库之间的桥梁,DbContext主要负责与数据交互,主要作用: 1、DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。 2、DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。 3、更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。 4、持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。 DbContext类与数据库交互模型 通用DbContext类 (By C/S框架网) 去掉繁琐的DbSet<>方式定义一堆固定的实体集合,改为采用动态Set<>方式与数据库交互。 C#源码 C# Code: using System.Data.Common; using System.Data.Entity; using System.Linq; namespace CSFramework.DBEF { /// <summary> /// 通用DbContext类,支持多数据库、支持动态实体模型 /// by: www.csframework.com (C/S框架网) /// </summary> public class GenericDbContex : DbContext { DbConnection _dbConnection; DatabaseConfig _databaseConfig; /// <summary> /// 构造器 /// </summary> /// <param name="connection">数据库连接</param> /// <param name="databaseConfig">数据库配置参数</param> /// <param name="contextOwnsConnection">由DbContext管理DbConnection实例的关闭与释放内存</param> public GenericDbContex(DbConnection connection, DatabaseConfig databaseConfig, bool contextOwnsConnection) : base(connection, contextOwnsConnection) { _dbConnection = connection; _databaseConfig = databaseConfig; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //重要:动态注册实体类,替换DbSet<>方式 foreach (var T in _databaseConfig.EntityTypes) modelBuilder.RegisterEntityType(T); } /// <summary> /// 获取查询接口 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="tracking"></param> /// <returns></returns> public IQueryable<T> GetQueryable<T>() where T : class { return this.Set<T>().AsQueryable<T>(); } } } //来源:C/S框架网 | www.csframework.com | QQ:23404761 EntityAssemblies.cs C# Code: using CSFramework.DBEF.Models; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Reflection; namespace CSFramework.DBEF.Tester { /// <summary> /// 全局程序集 /// </summary> public static class EntityAssemblies { /// <summary> /// WebApi框架所有程序集 /// </summary> public static System.Reflection.Assembly[] Assemblies { get; set; } /// <summary> /// 加载程序集 /// </summary> /// <param name="hostBuilder"></param> /// <returns></returns> public static void LoadAssemblies() { var T1 = typeof(EntityAssemblies); var T2 = typeof(Test_Customer); EntityAssemblies.Assemblies = new System.Reflection.Assembly[] { System.Reflection.Assembly.Load("CSFramework.DBEF.Models"), }; } private static System.Type[] _AllTypes = null; /// <summary> /// 所有类型Types /// </summary> public static System.Type[] GetTypes() { if (_AllTypes == null) _AllTypes = Assemblies.SelectMany(m => m.GetTypes()).ToArray(); return _AllTypes; } private static System.Type[] _EntityTypes = null; /// <summary> /// 所有实体类模型 /// </summary> /// <returns></returns> public static System.Type[] GetEntityTypes() { if (_EntityTypes == null) _EntityTypes = GetTypes().Where(x => x.GetCustomAttribute(typeof(TableAttribute), false) != null).ToArray(); return _EntityTypes; } } } //来源:C/S框架网 | www.csframework.com | QQ:23404761 测试 C# Code: private void btnTest_Click(object sender, EventArgs e) { string connString = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString.ToString(); var config = new DatabaseConfig { DbType = DatabaseType.SqlServer, AllTypes = EntityAssemblies.GetTypes(), EntityTypes = EntityAssemblies.GetEntityTypes(), }; // //三种常用数据库ADO.NET对象提供者 //SqlClientFactory.Instance //MySqlConnectorFactory.Instance //OracleClientFactory.Instance // //创建SqlServer数据库 var conn = SqlClientFactory.Instance.CreateConnection(); conn.ConnectionString = connString; //测试通用DbContext类 using (var db = new GenericDbContex(conn, config, true)) { //查询 var q = db.GetQueryable<Test_Customer>(); var list = q.Take(10).ToList(); //新增 var customer = NewCustomer(); db.Set<Test_Customer>().Add(customer); int i = db.SaveChanges(); //删除 var obj = q.Where(w => w.isid == customer.isid).FirstOrDefault(); db.Set<Test_Customer>().Remove(obj); int x = db.SaveChanges(); //测试事务 var tran = db.Database.BeginTransaction(); try { //add db.Set<Test_Customer>().Add(NewCustomer()); db.Set<Test_Customer>().Add(NewCustomer()); db.Set<Test_Customer>().Add(NewCustomer()); int a = db.SaveChanges(); //edit var aObj = q.OrderByDescending(o => o.CreationDate).FirstOrDefault(); aObj.NativeName = "修改了客户名称"; aObj.CreationDate = DateTime.Now; int b = db.SaveChanges(); //delete var aObj1 = q.OrderBy(o => o.isid).FirstOrDefault(); db.Set<Test_Customer>().Remove(aObj1); int c = db.SaveChanges(); tran.Commit(); } catch { tran.Rollback(); } //表示显示最近10条更新的记录 var source = q.OrderByDescending(o => o.CreationDate).Take(10).ToList(); ShowGrid(source); } } //来源:C/S框架网 | www.csframework.com | QQ:23404761 三种常用数据库支持(SqlServer、MySql、Oracle) 三种常用数据库ADO.NET对象提供者,NuGet包: SqlClientFactory.Instance MySqlConnectorFactory.Instance OracleClientFactory.Instance 注: 核心源码提供,其他导致编译失败的源码可自行删除。请关注作者正式发布 CSFramework.DBEF组件。 扫一扫加作者微信
参考文档:
开发框架支持的两种ORM模型(静态类/实体类) CS开发框架对大并发大数据量以及多数据库的支持方案是怎样的? C#多数据库组件包支持MSSQL+Oracle+MySQL+用户操作手册|C/S框架网 如何使用多数据库IDatabase接口以及数据访问层应用 CSFramework.DB基于ADO.NET多数据库底层组件包(MSSQL+Oracle+MySQL) C# 动态对象转换为实体对象支持泛型(DynamicToEntity) CSFramework通用自动提交数据工具类(DbDataUpdate),支持MsSQL,MySQL,Oracle三种数据库 CSFramework对象模型框架(DbDataUpdate),支持MsSQL,MySQL,Oracle三种数据库操作 CSFramework.DB多数据库支持组件DbDataUpdate.UpdateObject详解 Winform界面自适应快速开发框架(C#+Dev+三层架构+多数据库支持) DbFramework数据库实体类对象模型框架( 支持MsSQL,MySQL,Oracle三种数据库) 基于集团组织架构数据权限系统快速开发框架(C#.NET Winform+支持多数据库) C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)-C/S开发框架 DbFramework数据库实体类对象模型框架( 支持MsSQL,MySQL,Oracle三种数据库)|C/S开发框架 多数据库支持 | MiniFramework | 蝇量级开发框架|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |