现在的位置: 首页 > 综合 > 正文

.Grove—— .Net下的ORM框架

2013年10月13日 ⁄ 综合 ⁄ 共 4795字 ⁄ 字号 评论关闭
 

.Grove—— .Net下的ORM框架

参见原文:http://grove.91link.com(英)

Grove下载

The .NET ORM Architecture.Net ORM 架构)

一、Grove描述

Grove是为.Net项目开发而设计的一个组件。Grove ORM Development Toolkit包含包含GroveToolkit两部分内容,Grove基于.Net框架,支持多数据,提供标准的拖曳、三层及多层的开发模式。

二、Grove工具包

Grove工具是一个基于.Net开发环境的附件,它能够从数据源直接查看到实体类与XML描述。例如单一对象或者关系对象(互相联系的对象),这里的几个抓图屏幕显示了它的一些描述。

三、The ObjectOperator

The ObjectOperator 与数据进行通信,它使用 AppSettingManager 来设置数据源,如设置数据库服务器的连接字符串。The ObjectOperator 使用Attributes决定在数据源中的字段与表与一个对象成员的映射关系,即字段与表做为一个持久性对象来使用与从数据源中返回一个对象成员属性。

The ObjectOperator 可能使用一个存在连接字符串来构造,或者你必须确保在当前项目的Web.Config文件中的ConfigurationSettings存在AppSettings节点,并设置Key属性值为"DBConnString",Value值为一个正确的连接字符串。

下面的例子显示了ObjectOperator的创建:

[System.Configuration.ConfigurationSettings.AppSettings["DBConnString"];]

ObjectOperator oo=new ObjectOperator();

[Custom Connection String]

ObjectOperator oo=new ObjectOperator("Server=localhost;Uid=sa;Pwd=sa;Database=sample");

ObjectOperator提供了下列方法,主要功能是从一个数据源中返回对象,或者返回给数据源对象。

Method

Description

Insert

Insert an object into the data source

Update

Update an object

Remove

Delete an object from the data source

RemoveChilds

Delete child objects

Retrieve

Returns an object from the data source

RetrieveChilds

Returns child objects from the data source

GetDataReader

Returns an IDataReader from the data source

GetObjectSet

Returns a collection of object values

GetObjectSource

Returns a DataSet which contain the data source of the object

GetCount

Returns a records count of the data source

BeginTranscation

Begins a transaction at the data source, if transactions are supported by the data source. 

Commit

Commits the current transaction.

Rollback

Rolls back the current transaction.

四、The ObjectQuery

ObjectQuery被用来帮助ObjectOperator从数据源中获得对象,例如,ObjectOperator需要它来得到一个“QueryString”而加以执行,ObjectQuery使用Attributes关键字决定当前对象引用单表或多表。

一个ObjectQuery对象的构造,通过传递一个对象类型或一个过滤字符串给ObjectQuery的构造函数,详细过滤定义,参考Filter syntax(过滤语法)。例如,下面的ObjectQuery搜索所有State值等于“WA”的Customer对象。

ObjectQuery query=new ObjectQuery(typeof(Customer),"this.State='WA'");

为返回对象的所有数据类型,指定一个空的字符中作为你的过滤条件,如下例子:

ObjectQuery query=new ObjectQuery(typeof(Customer),"");

Filter 允许你在关系对象中使用“Contains”关键字定义字查询,你可以查询出存在定单数据超过50

所有Customer对象。

ObjectQuery query = new ObjectQuery(typeof(Customer),”Order.CustomerID.Contains(this.CustomerID)”);

query.DeclareSubset(typeof(Order),”Order.Quantity>50”);

五、The FilterExpression(过滤表达式)

FilterExpression 是一个可扩展的过滤,即FilterExpression允许你偏离ObjectQuery来为一些操作构造许多复杂的条件,例如通过自定义条件来更新一个对象。

一个FilterExpression的创建,通过传递一个对象类型或传递一个过滤字符串给ObjectQuery的构造函数。

例如下面的FilterExpression定义了一个State等于“WA”的所有“Customer类型”的对象的过滤表达式。

FilterExpression filterex = new FilterExpression(typeof(Customer),”this.State=’WA’”);

Filter 允许你在关系对象中使用“Contains”关键字定义字查询,你可以查询出存在定单数据超过50的所有Customer对象。

FilterExpression filterex=new FilterExpression(typeof(Customer),"Order.CustomerID.Contains(this.CustomerID)");
filterex.DeclareSubset(typeof(Order),"Order.Quantity>50");

有时,我们需要更新一个对象的属性,而不更新其它属性。例如,仅仅需要更新Customer对象中State属性值,通过自定条件,如下所示:

ObjectOperator oo=new ObjectOperator();
oo.Update(typeof(Customer),filerex,"this.Status=1");

这个例子意思是将定单数量(Order)大于50的所有客户(Customer)的“State”的值设为1

Persisting Objects(持久性对象) 

一、Mapping Object Properties(映射对象属性)

         Grove ORM architecture 要求每一个持久性对象包含一个属性,这个属性值表示一个来自数据源的表的名字,此表名标示符在Object Mapping (对象映射)中用DataTable属性关键字来表示。

当从一个数据源中映射过来时,这PK(主键字段)需要一个属性,来表示此字段为主键字段,例如,

[KeyField("CustomerID")]
public int CustomerID{get; set;}

如果这PK Field(主键字段)不唯一,你必须确保这“KeyType”是“UniquelType.OtherDefinition”,下面的例子表示了字段类型是一个数据不唯一的String(字符串)类型。

[KeyField("Field Name",KeyType=UniqueIDType.OtherDefinition)]
public string PropertyName{get; set;}

并且,这PK field也可以使用ForeignKeyField属性来表示来自数据源的一个字段名(外键)。、

[DataTable("Orders")]
public class Order
{
    [ForeignKeyField("CustomerID")]
    public int CustomerID{get; set;}
}

另外,其它字段也需要一个名为DataField的属性来表示来自数据源的表的字段。

[DataField("Field Name")]
public type PropertyName{get; set;}

当将数据源(表)映射成为对象时,你需要量将the .NET framework data provider data types 映射成为NET framework data types

下面的表显示了.NET Framework typeMicrosoft SQL Server, OLE DB, and ODBC.的比较。详细信息请参考.NET Framework Developer's Guide

注意:在.NET Framework data provider data types下的Null值被取代为DBNull.Value

.NET Framework Data Provider for SQL Server

SQL Server type

.NET Framework type

bigint

Int64

binary

Byte[]

bit

Boolean

char

String Char[]

datetime

DateTime

decimal

Decimal

float

Double

image

Byte[]

int

Int32

money

Decimal

nchar

String Char[]

ntext

String Char[]

numeric

Decimal

nvarchar

String Char[]

real

Single

smalldatetime

DateTime

smallint

Int16

smallmoney

Decimal

sql_variant

Object *

text

String Char[]

timestamp

Byte[]

tinyint

Byte

uniqueidentifier

Guid

varbinary

Byte[]

varchar

String Char[]

.NET Framework Data Provider for OLE DB

OLE DB type

.NET Framework type

DBTYPE_I8

Int64

DBTYPE_BYTES

Byte[]

DBTYPE_BOOL

Boolean

DBTYPE_BSTR

String

DBTYPE_HCHAPTER

Supported through the DataReader

DBTYPE_STR

String

DBTYPE_CY

Decimal

DBTYPE_DATE

DateTime

DBTYPE_DBDATE

DateTime

DBTYPE_DBTIME

DateTime

DBTYPE_DBTIMESTAMP

DateTime

DBTYPE_DECIMAL

Decimal

DBTYPE_R8

Double

DBTYPE_ERROR

ExternalException

DBTYPE_FILETIME

DateTime

DBTYPE_GUID

Guid

DBTYPE_IDISPATCH *

Object

DBTYPE_I4

Int32

DBTYPE_IUNKNOWN *

Object

DBTYPE_NUMERIC

Decimal

抱歉!评论已关闭.