zoukankan      html  css  js  c++  java
  • 【开源系列】三国演义LBS (十)源码:ORM框架

    前言

    -----------------------------------------------

    相关讨论组入口: http://www.pixysoft.net/ (点击进入)

     

     

     

     

    功能简介:

    -----------------------------------------------     

    纯面向对象的数据库操作。

    使用动态反射实现Aop拦截,完成ORM操作,性能与ADO.NET一致。 

    快速入门  
    -----------------------------------------------     

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Pixysoft.Framework.XSchEmA;
    using Pixysoft.Tools;

    namespace Pixysoft.Framework.Noebe.Orm.testdriven
    {
        
    class quickstart
        {
            
    /// <summary>
            
    /// 部署数据库
            
    /// </summary>
            public void test_001()
            {
                
    string path = StringFilter.RegularPath(AppDomain.CurrentDomain.BaseDirectory) + "helloworld.mdb";

                XSchemaManager.AccessSchema.Schema.DropDatabase(
    null, path);
                XSchemaManager.AccessSchema.Schema.CreateDatabase(
    null, path);

                NoebeConfiguration config 
    = new NoebeConfiguration();
                config.DatabaseType 
    = DatabaseType.Access;
                config.Filename 
    = path;
                NoebeManager.Instances[OrmManager.GLOBAL_FRAMEWORK_ID].Reloads(config);
                NoebeManagerAdapter.Instances[OrmManager.GLOBAL_FRAMEWORK_ID].Initializes(NoebeManager.Instances[OrmManager.GLOBAL_FRAMEWORK_ID]);

                
    new OrmSchema().Drop<Person>(config);
                
    new OrmSchema().Commit<Person>(config);
            }

            
    /// <summary>
            
    /// 增删改查
            
    /// </summary>
            public void test_002()
            {
                
    //初始化ORM依赖的持久层

                
    string path = StringFilter.RegularPath(AppDomain.CurrentDomain.BaseDirectory) + "helloworld.mdb";
                NoebeConfiguration config 
    = new NoebeConfiguration();
                config.DatabaseType 
    = DatabaseType.Access;
                config.Filename 
    = path;
                NoebeManager.Instances[OrmManager.GLOBAL_FRAMEWORK_ID].Reloads(config);
                NoebeManagerAdapter.Instances[OrmManager.GLOBAL_FRAMEWORK_ID].Initializes(NoebeManager.Instances[OrmManager.GLOBAL_FRAMEWORK_ID]);



                
    //创建对象

                
    string carpk = GlobalTimer.Instance.GetGlobalTimeSequence();
                Car car 
    = OrmManager.Instance.GetSession().Create<Car>();
                car.StringValue 
    = carpk;
                OrmManager.Instance.GetSession().Save(car);

                List
    <string> list = new List<string>();
                list.Add(
    "1");
                list.Add(
    "2");
                list.Add(
    "3");

                
    string personpk = GlobalTimer.Instance.GetGlobalTimeSequence();
                Person person 
    = OrmManager.Instance.GetSession().Create<Person>();
                person.StringValue 
    = personpk;
                person.IntValue 
    = 13;
                person.StringArray 
    = new string[] { "1""2""3" };
                person.StringList 
    = list;

                person.OrmObject 
    = car;
                person.OrmArray 
    = new Car[] { car };
                List
    <Car> ormlist = new List<Car>();
                ormlist.Add(car);
                person.OrmList 
    = ormlist;
                OrmManager.Instance.GetSession().Save(person);


                
    //简易查询

                person 
    = OrmManager.Instance.GetQuery().SelectByUpk<Person>(personpk);
                Console.WriteLine(person.IntValue);



                
    //右查询 从Person开始查,查询条件是Person.OrmList的所有值。

                Console.WriteLine(
    "------------ RIGHT QUERY ------------");
                IOrmRightQuery
    <Person> rightquery = OrmManager.Instance.GetRightQuery<Person>();//第一个范型表示查询起始的对象类型
                rightquery.QueryString = "OrmList";
                rightquery.OrmObject 
    = person;
                
    foreach (Car qcar in rightquery.Select<Car>()) //第二个范型表示查询结果的类型
                {
                    Console.WriteLine(qcar.StringValue);
                }


                
    //左查询 从car开始向左查询,得到拥有这个Car的Person集合。

                Console.WriteLine(
    "------------ LEFT QUERY ------------");
                IOrmLeftQuery
    <Person> leftquery = OrmManager.Instance.GetLeftQuery<Person>();
                leftquery.QueryString 
    = "OrmList.StringValue = :VALUE";
                leftquery.Parameters.Add(
    "VALUE", carpk);
                
    foreach (Person qperson in leftquery.Select())
                {
                    Console.WriteLine(qperson.StringValue);
                }
            }
        }
    } 

    ORM对象声明:

        [OrmAlias("IPerson")]
        
    public interface Person
        {
            [OrmPrimaryKey]
            
    string StringValue { get;set;}
            
    string[] StringArray { get;set;}
            List
    <string> StringList { get;set;}
            
    int IntValue { get;set;}
            
    byte[] BytesValue { get;set;}
            Sex EnumValue { 
    get;set;}
            Car OrmObject { 
    get;set;}
            List
    <Car> OrmList { get;set;}
            Car[] OrmArray { 
    get;set;}
        }

        [OrmAlias(
    "ICar")]
        
    public interface Car
        {
            [OrmPrimaryKey]
            
    string StringValue { get;set;}
            
    string[] StringArray { get;set;}
            List
    <string> StringList { get;set;}
            
    int IntValue { get;set;}
            
    byte[] BytesValue { get;set;}
            CarWindow OrmObject { 
    get;set;}
            List
    <CarWindow> OrmList { get;set;}
            CarWindow[] OrmArray { 
    get;set;}
        } 

    下期预告:

    -----------------------------------------------     

    Pixysoft.Framework.Remoting 远程调用框架。

    是web 2.0 快速开发的基础!!! 

     

    附件下载

    -----------------------------------------------    
    Pixysoft.Framework.Noebe.Orm 打包下载:  

      

  • 相关阅读:
    BP神经网络算法学习
    《SAS编程与数据挖掘商业案例》学习笔记之十六
    leetcode:Best Time to Buy and Sell Stock II
    ASP.NET Web Pages:WebMail 帮助器
    ASP.NET Web Pages:Chart 帮助器
    ASP.NET Web Pages:WebGrid 帮助器
    ASP.NET Web Pages:帮助器
    ASP.NET Web Pages:文件
    ASP.NET Web Pages:对象
    ASP.NET Web Pages:表单
  • 原文地址:https://www.cnblogs.com/zc22/p/2045016.html
Copyright © 2011-2022 走看看