zoukankan      html  css  js  c++  java
  • Mego开发文档

    从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可以快速成长,感谢各位的问题及意见反馈。
  • 相关阅读:
    BZOJ 2738 矩阵乘法(整体二分+二维树状数组)
    BZOJ 1430 小猴打架(prufer编码)
    BZOJ 2818 Gcd(莫比乌斯反演)
    BZOJ 4403 序列统计(Lucas)
    BZOJ 3083 遥远的国度(树链剖分+线段树)
    BZOJ 2049 [Sdoi2008]Cave 洞穴勘测(动态树)
    BZOJ 3282 Tree(动态树)
    BZOJ 3239 Discrete Logging(BSGS)
    BZOJ 2683 简单题(CDQ分治+树状数组)
    BZOJ 4327 JSOI2012 玄武密码(后缀自动机)
  • 原文地址:https://www.cnblogs.com/CarefreeXT/p/8763454.html
Copyright © 2011-2022 走看看