EF是传统的ORM框架,也是一个比较重量级的ORM框架。这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择。

1.1 准备一张数据库表

  (1)For MSSQL

CREATE TABLE [dbo].[Posts]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [CategoryId] INT NOT NULL, 
    [Slug] VARCHAR(120) NOT NULL,  
    [Title] NVARCHAR(100) NOT NULL, 
    [Published] DATETIME NOT NULL,
    [Excerpt] NVARCHAR(MAX) NOT NULL, 
    [Content] NVARCHAR(MAX) NOT NULL
);

  (2)For MySQL

CREATE TABLE Posts
(
    Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    CategoryId INT NOT NULL, 
    Slug VARCHAR(120) NOT NULL,  
    Title NVARCHAR(100) NOT NULL, 
    Published DATETIME NOT NULL,
    Excerpt LONGTEXT NOT NULL, 
    Content LONGTEXT NOT NULL
);

1.2 使用Model First方式创建数据模型

  (1)通过nuget添加EF组件引用,然后创建edmx数据模型

轻量级ORM框架初探-Dapper与PetaPoco的基本使用

  (2)由于EF首次使用存在效率问题,因此采用园子里推荐的EF暖机操作作为测试首次执行的代码

    static void WarmupEntityFramework()
    {
        // EF暖机操作
        using (var db = new MyAppDBContext())
        {
            var objectContext = ((IObjectContextAdapter)db).ObjectContext;
            var mappingCollection = (System.Data.Entity.Core.Mapping.StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace);
            mappingCollection.GenerateViews(new System.Collections.Generic.List<System.Data.Entity.Core.Metadata.Edm.EdmSchemaError>());
        }
    } 

  (3)写一个读取数据的方法,遍历读取Posts表记录(该表有1万行记录)

    static void ModelFirstReadPosts()
    {
        var dbContext = new MyAppDBContext();
        foreach (var item in dbContext.Posts)
        {
            Console.WriteLine("ID:{0},Title:{1}", item.Id, item.Title);
        }
    } 

  (4)编写入口方法,通过Stopwatch记录测试耗时

    class Program
    {
        static Program()
        {
            WarmupEntityFramework();
        }

        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            // EF:4.9s
            ModelFirstReadPosts();
            watch.Stop();
            Console.WriteLine("Time consumed : {0} ms", watch.ElapsedMilliseconds);

            Console.ReadKey();
        }

        #region Method01.EntityFramework暖机操作
        static void WarmupEntityFramework()
        {
            // EF暖机操作
            using (var db = new MyAppDBContext())
            {
                var objectContext = ((IObjectContextAdapter)db).ObjectContext;
                var mappingCollection = (System.Data.Entity.Core.Mapping.StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace);
                mappingCollection.GenerateViews(new System.Collections.Generic.List<System.Data.Entity.Core.Metadata.Edm.EdmSchemaError>());
            }
        } 
        #endregion

        #region Method02.Model First方式读取数据库表记录
        static void ModelFirstReadPosts()
        {
            var dbContext = new MyAppDBContext();
            foreach (var item in dbContext.Posts)
            {
                Console.WriteLine("ID:{0},Title:{1}", item.Id, item.Title);
            }
        } 
        #endregion
    }
View Code

相关文章: