【开源系列】三国演义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 打包下载:  

  

原文地址:https://www.cnblogs.com/zc22/p/2045016.html