从EF6/EFCore迁移到Mego框架

如果您有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。

[文档目录]

Mego开发文档 - 从EF6/EFCore迁移到Mego的更多相关文章

  1. Mego开发文档 - 索引

    Mego 开发文档 Mego 快速概述 主要特性 获取Mego 使用流程 模型 查询 保存数据 入门 Mego 快速开始 创建项目 安装Nuget包 创建连接字符串 创建模型及数据上下文(添加引用) ...

  2. Mego开发文档 - 快速概述

    Mego 快速概述 Mego 是一款轻量级,可扩展和跨平台的数据访问技术. Mego 是一个对象关系映射器(O / RM),它使.NET开发人员能够使用.NET对象处理数据库.它消除了开发人员通常需要 ...

  3. Mego开发文档 - 快速开始

    Mego 快速开始 我们将创建一个简单的数据新增及查询来演示 Mego 的使用过程.演示中都是使用 Visual Studio 2017 作为开发工具,SQL Server 2012 作为数据库. 创 ...

  4. Mego开发文档 - 数据注释建模

    数据注释建模 Mego框架使用一组约定来基于CLR类来构建模型.您可以指定其他配置来补充或覆盖通过约定发现的内容. 在 Mego 中所有的数据对象必须要有主键.这里需要声明与EF不同的是框架只支持数据 ...

  5. Mego开发文档 - 建模高级主题

    建模高级主题 在建模过程中我们还有许多其他情况,这里列出本框架中的有用特性来用于解决此类问题. 函数映射 我们可以将指定的CLR函数映射到数据库中的系统函数或自定义函数,该特性用于补充框架中未提供的数 ...

  6. Mego开发文档 - 基础查询

    基础查询 Mego 使用语言集成查询(LINQ)从数据库查询数据.LINQ允许您使用C#(或其他.NET语言)根据派生的上下文和实体类编写强类型查询.将LINQ查询的表示传递给数据库提供者,翻译为数据 ...

  7. Mego开发文档 - 复杂查询

    复杂查询 Mego 还支持一些更高级的LLINQ查询写法,本文只列出一部分. 分组汇总查询 using (var db = new OrderManageEntities()) { var query ...

  8. Mego开发文档 - 加载关系数据

    加载关系数据 Mego允许您使用模型中的导航属性来加载相关数据对象.目前只支持强制加载数据对象.只有正确配置了关系才能加载关系数据,相关内容可参考关系配置文档. 加载对象属性 您可以使用该Includ ...

  9. Mego开发文档 - 基本保存操作

    基本保存操作 在Mego中没有更改跟踪,也就是说所有的新增.更新及删除都需要开发者自行判断.Mego会最为实际的将各个数据操作提交给数据库并执行. 添加数据 using (var db = new O ...

随机推荐

  1. Lastpass——密码管理工具

    Lastpass是一个优秀的在线密码管理器和页面过滤器,采用了强大的加密算法,自动登录/云同步/跨平台/支持多款浏览器. 我之前一直都在使用这个工具,不过都是在浏览器上以扩展的方式使用,在火狐浏览器上 ...

  2. 简述TCP的三次握手过程

    一.TCP报文格式   TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式         上图中有几个字段需要重点介绍下:    ...

  3. Python功能键

    swapcase ,大小写翻转 title,每个单词首字母大写 upper,全部大写 lower,全小写 center,居中(可填充符号) lstrip,去除首尾空格斜杠符号 find,寻找出现的位数 ...

  4. 关闭NetworkManager的作用

    author: headsen  chen date: 2017-11-21  13:34:23 个人原创 重启网卡后,会造成网卡失效,报错如下: Bringing up interface eth0 ...

  5. Angular开发实践(一):环境准备及框架搭建

    引言 在工作中引入Angular框架将近一年了,在这一年中不断的踩坑和填坑,当然也学习和积累了很多的知识,包括MVVM框架.前后端分离.前端工程化.SPA优化等等.因此想通过Angular开发实践这系 ...

  6. 关于embed的一些使用兼容

    因公司需求,要做一个扫描语音播报的功能,所以用到一些音频/视频标签 考虑到   <embed>   标签对于ie的兼容性更好一些所以,我在这采用了   <embed>   标签 ...

  7. JavaIO

    1.字节流和字符流 在IO有两种数据传输格式一个是字符流还一个是字节流,但是字符流就会涉及到编码的问题. 一开始美国使用的自己的编码表就是ASCII表 中国的字符需要被识别也需要编码表于是就有了GB2 ...

  8. MYSQL数据库学习十八 数据库维护和性能提高

    18.1 数据备份 可能造成数据损失的原因有: 存储介质故障:保存数据库文件的磁盘设备损坏,用户没有数据库备份导致数据彻底丢失. 用户的错误操作:如误删了某些重要数据,甚至整个数据库. 服务器的彻底瘫 ...

  9. MYSQL数据库学习十四 存储过程和函数的操作

    14.1 为什么使用存储过程和函数 一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句. 存储过程和函数的优点: 允许标准组件式编程,提高了S ...

  10. Algorithm --> Kruskal算法和Prim算法

    最小生成树之Kruskal算法和Prim算法 Kruskal多用于稀疏图,prim多用于稠密图. 根据图的深度优先遍历和广度优先遍历,可以用最少的边连接所有的顶点,而且不会形成回路.这种连接所有顶点并 ...