您现在的位置是: 首页 > InkFx 技术 > InkFx.ORM(跨数据库)

『2012』Beetle.Source & Laura.Source 跨数据库ORM框架
ShuXiaolong 2016-12-03 60人围观
4 条评论
简介 从 代码生成器 开始,作者开始 了跨数据库研究。
当 代码生成器 最后一版结束时,跨数据库ORM 也顺手完成。
Forever.Data 到 Forever.Source。
再到 2012年创业期间,Beetle.Source 对 之前ORM 设计思路上 大改,增加了 内存缓存检索、排序。
再到 2014年,Laura.Source 将 Beetle.Source 的 内存缓存检索 机制删除,并 引入 跨数据库事务。
—— 作者 终究在 ORM 道路上 一条道 走到黑。

    从 代码生成器 开始,作者开始 了跨数据库研究。

    当 代码生成器 最后一版结束时,跨数据库ORM 也顺手完成。

    Forever.Data 到 Forever.Source。

    再到 2012年创业期间,Beetle.Source 对 之前ORM 设计思路上 大改,增加了 内存缓存检索、排序。

    再到 2014年,Laura.Source 将 Beetle.Source 的 内存缓存检索 机制删除,并 引入 跨数据库事务。

    —— 作者 终究在 ORM 道路上 一条道 走到黑。

     


    版本轨迹:

    Forever.Data,Forever.Source,Beetle.Source,Laura.Source,InkFx.ORM 跨数据库ORM框架 版本变迁 2011        Forever.Data(第一个ORM框架)  2011        Forever.Source(Forever.Data升级版)  2012        Beetle.Source(ORM框架设计思路大改)  2013        Laura.Source(ORM框架大量精简优化)  2015        InkFx.ORM(新增 数据库迁移工具、实体工具)

     

     

    在线开源:

    http://www.ink1989.com/Source/F1B7802F83074B128C46E02E30C667C5

     

     

    Laura.Source 跨数据库事务 Demo代码:

    //===============================================================================
    // 本类代码 由 Laura.Source.ForCode 工具生成
    // 本类实体 针对 Laura.Source 创建, 可能不能用于 其他 非基于 Laura.Source 的 数据据访问框架
    // Copyright (C) 2013 ShuXiaolong
    //===============================================================================
    
    
    using System;
    using Laura.Source.Attributes;
    
    namespace Laura.Source.Test.Entity
    {
        ///     /// MySql 数据库 的实体
        ///     [Serializable]
        [EntityTable(Name = "TB_TEST", DataBase = "LauraBlog,TestMySql,TestSQLite")]
        public class TB_TEST
        {
    
            private string fName = string.Empty;
            private string fNumber = string.Empty;
    
            [EntityField(Name = "FId", UniteType = UniteSqlType.Int, IsPrimary = true, IsIdentity = true, IsNotNull = true)]
            public Int32 FId { get; set; }
    
            [EntityField(Name = "FName", UniteType = UniteSqlType.NString, IsPrimary = true, IsIdentity = false, IsNotNull = true)]
            public string FName { get { return fName; } set { fName = value ?? string.Empty; } }
    
            [EntityField(Name = "FNumber", UniteType = UniteSqlType.NString, IsPrimary = false, IsIdentity = false, IsNotNull = true)]
            public string FNumber { get { return fNumber; } set { fNumber = value ?? string.Empty; } }
    
        }
    
    
    }
                  
    using System;
    using System.Collections.Generic;
    using System.Data.SQLite;
    using System.Data.SqlClient;
    using System.Text;
    using System.Threading;
    using Laura.Source.Test.Entity;
    
    namespace Laura.Source.Test
    {
        public class LauraSourceTest
        {
    
            ///         /// SQLite 标准链接字符串
            ///         [NUnit.Framework.Test]
            public void TestSQLiteConnString()
            {
                SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder();
                connBuilder.DataSource = @"D:\HaHaTest.sqlite";
                connBuilder.Version = 3;
                connBuilder.Password = "admin";
                connBuilder.UseUTF16Encoding = true;
                string connString = connBuilder.ConnectionString;
                Console.WriteLine(connString);
            }
    
    
            ///         /// MySql 和 SqlServer 数据库中 都有表 TB_TEST。本函数 用于测试 跨数据库的事务。
            ///         [NUnit.Framework.Test]
            public void TestTransaction()
            {
                //创建事务
                using (LauraTransaction transaction = new LauraTransaction())
                {
                    LauraService sourceService = LauraService.CreateService(transaction);
                    LauraService targetService = LauraService.CreateService(transaction);
                    LauraService targetService2 = LauraService.CreateService(transaction);
    
                    //从 SqlServer 中 获取实例 数组
                    List sourceArray = sourceService.GetList(string.Empty, string.Empty);
    
                    //将 获取的 实例 存入 MySql 数据库
                    if (sourceArray != null)
                    {
                        foreach (SqlServer_TB_TEST sourceItem in sourceArray)
                        {
                            MySql_TB_TEST targetItem = new MySql_TB_TEST { FId = sourceItem.FId, FName = sourceItem.FName, FNumber = sourceItem.FNumber };
                            SQLite_TB_TEST targetItem2 = new SQLite_TB_TEST { FId = sourceItem.FId, FName = sourceItem.FName, FNumber = sourceItem.FNumber };
                            targetService.Insert(targetItem);
                            targetService2.Insert(targetItem2);
                        }
                    }
    
    
                    transaction.Commit();
                    //transaction.Rollback();
                }
            }
    
            ///         /// MySql 和 SqlServer 数据库中 都有表 TB_TEST。本函数 用于测试 跨数据库的事务。
            ///         [NUnit.Framework.Test]
            public void TestTransaction2()
            {
                //创建事务
                using (LauraTransaction transaction = new LauraTransaction())
                {
                    LauraService sourceService = LauraService.CreateServiceByDbName("TestSQLite", transaction);
                    LauraService targetService = LauraService.CreateServiceByDbName("TestMySql", transaction);
                    LauraService targetService2 = LauraService.CreateServiceByDbName("TestSQLServer", transaction);
    
                    //从 SqlServer 中 获取实例 数组
                    List sourceArray = sourceService.GetList(string.Empty, string.Empty);
    
                    //将 获取的 实例 存入 MySql 数据库
                    if (sourceArray != null)
                    {
                        foreach (TB_TEST sourceItem in sourceArray)
                        {
                            targetService.Insert(sourceItem);
                            targetService2.Insert(sourceItem);
                        }
                    }
    
                    transaction.Commit();
                    //transaction.Rollback();
                }
    
                Console.ReadKey();
            }
    
            ///         /// 普通测试。
            ///         [NUnit.Framework.Test]
            public void TestNormal()
            {
                LauraService targetService = new LauraService();
                MySql_TB_TEST targetItem = new MySql_TB_TEST { FName = "测试用户", FNumber = "TestUser" };
                targetService.Insert(targetItem);
            }
        }
    }

     

     

     

     

第一时间获取智能手机行业新鲜资讯和商业动态,可以访问站长的微博「InkFx」, 如果需要站长陪聊也可以在微信里添加好友,搜索「Shu_Xiaolong」, 还可以通过加入QQ群:「C#实验室」,和网友一起交流技术、共同进步。

文章评论

图文推荐

InkFx博客 有部分文章来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点。
如是侵犯了原作者的权利,请发邮件联系站长(514286339@qq.com),站长收到后立即删除。