如果您有 EntityFragmework6 或 EntityFragmeworkCore 的开发经验, 在首次接触 Mego 框架时会发现这两个框架非常相似, 本文将帮忙您了解到两者的差异以及从 EF6/EFCore 迁移到 Mego 的方法.
Mego 本身就是基于 EF6 与 EFCore 的思想来开发的, 因此这两者的很多做法都是相通的, 同时为了考虑到易于使用, 所以最外层的 API 我们几乎还是维持了 EF6 的原样, 但是它们毕竟还是两个框架, 只是表面相似其实有着本质的不同. 这里我们列出几点重要的区别:
Mego 中没有 EDM 模型, 我们为了实现对象到数据为表映射的高度灵活, 于是省略了这一层的中间模型, 我们可以支持任意 CLR 类型映射到数据库的任何表对象.
Mego 中没有对象更改跟踪, 为了节省避免创建出多余的对象提升性能, 这一点上我们没有像 EF 那么便捷, 但是我们可以最快速的完成对象与数据库之前的数据往返.
Mego 中数据关系只有逻辑上的关系重数 (一对一, 一对多及多对多等) 概念, 在代码实现上我们不关注这一点, 这样我们可以最大灵活的创建出我们想要的关系.
Mego 中不需要特定数据库的附加程序集, 像 EF 以及其他众多的 ORM 框架都会针对每一种数据库的实现一个附加的程序集. 在这一点上 Mego 有别于其他所有的框架我们将统一实现所有支持的数据库, 以保证我们对每一种数据库都有一致的实现.
下面我们将一步步完成的一个从 EF 迁移到 Mego 的过程.
Code First 创建 EF
首先我们先确定下要操作的数据库结构, 如下图所示
然后我们创建一个控制台项目, 并添加实体数据模型, 这里我们使用来自数据库的 Code First 的模式创建, 如下图所示.
在经过一系列设置后就创建了很多代码文件, 即完成创建工作, 这里我们看下生成的数据上下文对象代码.
- using System;
- using System.Data.Entity;
- using System.ComponentModel.DataAnnotations.Schema;
- using System.Linq;
- public partial class OrderModel : DbContext
- {
- public OrderModel()
- : base("name=OrderModel")
- {
- }
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<OrderDetail> OrderDetails { get; set; }
- public virtual DbSet<Order> Orders { get; set; }
- public virtual DbSet<Product> Products { get; set; }
- public virtual DbSet<Warehouse> Warehouses { get; set; }
- protected override void OnModelCreating(DbModelBuilder modelBuilder)
- {
- }
- }
修改命名空间及注释
在准备做这一步之前, 需要添加对 Mego 的 Nuget 包引用. 我们需要调整下所有生成代码文件中的命名空间. 将如下的命名空间
- using System.Data.Entity;
- using System.ComponentModel.DataAnnotations.Schema;
换成
- using Caredev.Mego;
- using Caredev.Mego.DataAnnotations;
数据上下文构造函数做下调整
- public OrderModel()
- : base("name=OrderModel")
- {
- }
改成
- public OrderModel()
- : base("OrderModel")
- {
- }
然后删除 OrderModel 对象中的 OnModelCreating 方法. 如果需要关系对象, 则可以参考关系配置文档的相关信息.
确认下数据对象类名与数据表是否一致, 如果不一致需要像如下代码一样加入注释.
- [Table("Customers")]
- public partial class Customer
- {
- }
演示查询操作
到这里我们就完成的所有切换工作, 现在就可以使用 Mego 操作数据.
- using (var context = new OrderModel())
- {
- var list = context.Customers.ToArray();
- }
代码生成工具
为了方便大家日常开发, 我们计划开发 Mego 框架的多个数据库代码生成工具, 可以支持命令行调用以及集成到 Visual Studio.
[文档目录]
来源: https://www.cnblogs.com/CarefreeXT/p/8763454.html