【开源系列】三国演义LBS (十)源码:ORM框架
2011-05-13 00:47
381 查看
前言:
-----------------------------------------------相关讨论组入口: 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 打包下载:http://www.boxcn.net/shared/xqgr3srjx9
SVN:
http://qun.qq.com/air/#95755843/share
相关文章推荐
- 【开源系列】三国演义LBS (六)源码:基础框架:日志
- 【开源系列】三国演义LBS (十一)源码:远程调用框架
- 【开源系列】三国演义LBS (七)源码:基础框架:无与伦比的序列化!
- 【开源系列】三国演义LBS (四)源码:基础框架:验证
- 【开源系列】三国演义LBS (五)源码:基础框架:终极反射
- 【开源系列】三国演义LBS (三)源码:基础库
- 【开源系列】三国演义LBS (八)源码:核心框架:数据库建模
- 【开源系列】三国演义LBS (九)源码:持久层
- 【开源系列】三国演义LBS (一)商业计划书
- 【开源系列】三国演义LBS (二)游戏策划案
- 源码探索系列4---数据库ORM框架之Ormlite解析
- .net下开源轻量级ORM框架Dapper扩展系列3
- .net下开源轻量级ORM框架Dapper扩展系列4(重构与优化)
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
- 【强烈推荐】开源C#工具类MSCL系列(九)File文件类...更多请点击右侧购买源码
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
- .net下开源轻量级ORM框架Dapper扩展系列2
- Zabbix 开源监控系列 一、zabbix 源码安装
- 【安卓网络请求开源框架Volley源码解析系列】初识Volley及其基本用法
- 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析