由于现在框架数NHibernate最流行,我就以NHibernate为例,介绍VCS Framework的使用方法,本人站在中间立场不评价NHibernate的好坏,如果大家感兴趣,我专门开设一个论坛(http://vcsproject.com/forums/16/ShowForum.aspx),可以放手去评论。
首先讲述一下使用本框架的基本软件环境:
1、VCS Framework当前的版本是0.9(由于生成器依赖于Codesmith),下载地址:http://www.cnblogs.com/files/luoqing/src.rar
2、Code Smith http://www.codesmithtools.com/
3、生成器http://www.cnblogs.com/files/luoqing/Genarated.rar
4、VS2005
5、SQL Server2005
其他下载:http://luoqing.cnblogs.com/archive/2006/04/13/374241.html
本教程只能在SQL Server2005上运行,默认情况下,我将建立并使用一个叫VCS的数据库。
首先,我们先建立一个最简单的Person表,如下完整脚本(你可以进行修改以适合自己的数据库):
当然,由于VCS处理0.9版,所以当前主键只能为Guid类型,并且数据库中有一个SSIndex int IDENTITY(1,1)类型。VCS 1.0在1个月后发布,解决这些问题。
USE
[
VCS
]
GO
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
SET
ANSI_PADDING
ON
GO
CREATE
TABLE
[
dbo
]
.
[
Person
]
(
[
id
]
[
uniqueidentifier
]
NOT
NULL
,
[
name
]
[
nvarchar
]
(
50
) COLLATE Chinese_PRC_CI_AS
NOT
NULL
,
SSIndex
int
IDENTITY
(
1
,
1
),
CONSTRAINT
[
PK_Person
]
PRIMARY
KEY
CLUSTERED
(
[
id
]
ASC
)
WITH
(IGNORE_DUP_KEY
=
OFF
)
ON
[
PRIMARY
]
)
ON
[
PRIMARY
]

GO
SET
ANSI_PADDING
OFF
在SQL Server上运行后,下载生成器,打开生成器:

点一下步

把视图名从viewPerson改为Person;并选种Person。
再点两下“下一步”,进入下面页面:

点“生成代码”。
会生成下面的代码。

其中Person.cs(主要用于写业务逻辑,显得清楚)的代码是:
1
using
System;
2
using
com.Robert.Framework;
3
using
Robert.DataService;
4

5

6
namespace
com.test
7

{
8
/**//// <summary>
9
///
10
/// </summary>
11
public partial class Person : FrameObject
12
{
13
14
}
15
}
Genarated/Person.cs
using
System;
using
System.Data;
using
com.Robert.Framework;


namespace
com.test

{

/**//// <summary>
///
/// </summary>
[Serializable]
public partial class Person

{
public Person()

{
this._data = new PersonData();

this.id = Guid.NewGuid();
}

public Person(Guid ID)

{
this._data = new PersonManager().GetPersonByID(ID)._data;
}


Property#region Property

public virtual MyGuid id

{

get
{ return ((PersonData) this.ObjectData).id; }

set
{((PersonData) this.ObjectData).id=value;}
}

public virtual MyGuid Oldid

{

get
{ return ((PersonData) this.ObjectData).Oldid; }
}
public virtual string name

{

get
{ return ((PersonData) this.ObjectData).name; }

set
{((PersonData) this.ObjectData).name=value;}
}

public virtual string Oldname

{

get
{ return ((PersonData) this.ObjectData).Oldname; }
}
public virtual MyInt SSIndex

{

get
{ return ((PersonData) this.ObjectData).SSIndex; }

set
{((PersonData) this.ObjectData).SSIndex=value;}
}

public virtual MyInt OldSSIndex

{

get
{ return ((PersonData) this.ObjectData).OldSSIndex; }
}


List#region List

#endregion


object info#region object info

#endregion

#endregion


Operation#region Operation

public virtual Person Clone()

{
Person m_obj = new Person();
m_obj._data = this.ObjectData.Clone();
return m_obj;
}

protected override BaseProfile GetProfile()

{
return new PersonProfile(this);
}

#endregion

public override bool Equals(object obj)

{
if (obj is Person)

{
return this.id == ((Person)obj).id;
}
else

{
return base.Equals(obj);
}
}
public override int GetHashCode()

{
return base.GetHashCode();
}
}
}
该类主要用于生成,建议最好不用更改,以后可以用XML来重构时,生成器会自动重新生成该类,比如以后加字段或更改字段;
下面是系统生成的XML,该XML在系统的作用不是像NHibernate那样是个配置文件,在本框架中他是一个用于将来要重构的脚本文件(这里暂时先提一下,如果有什么信息,请进入http://vcsproject.com/forums/default.aspx)
XML文件:
<
TableInfo
RealObjectName
="Person"
TableName
="Person"
ViewName
="Person"
BaseObjectName
=""
IsAbstract
=""
>
<
Columns
>
<
Field
Checked
="True"
PropertyName
="id"
ColumnName
="id"
ForeignObjectName
=""
ForeignPropertyName
=""
IsBaseColumn
="True"
IsPrimaryKeyMember
="True"
DBType
="9"
Size
="16"
IsAbstract
=""
IsOverride
=""
EnmType
=""
/>
<
Field
Checked
="True"
PropertyName
="name"
ColumnName
="name"
ForeignObjectName
=""
ForeignPropertyName
=""
IsBaseColumn
="True"
IsPrimaryKeyMember
="False"
DBType
="16"
Size
="50"
IsAbstract
=""
IsOverride
=""
EnmType
=""
/>
<
Field
Checked
="True"
PropertyName
="SSIndex"
ColumnName
="SSIndex"
ForeignObjectName
=""
ForeignPropertyName
=""
IsBaseColumn
="True"
IsPrimaryKeyMember
="False"
DBType
="11"
Size
="4"
IsAbstract
=""
IsOverride
=""
EnmType
=""
/>
</
Columns
>
<
Foreigns
/>
</
TableInfo
>
OK, 代码生成完毕;
现在把我的框架打开,新建一个ClassLibrary工程,把生成的代码Copy到新建的工程里,再把com.Robert.Type,com.Robert.Framework,DataService,MyException引用到工程里,再把com.Robert.AccountTestFramework里的ConnectionHelper文件夹Copy到新增的工程里,删除“com.Robert.AccountTestFramework”及“TestFramework”和“TestClass”,由于这三个工程是我在框架里加入的样例代码。
把
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
using
Robert.DataService;
5

6
namespace
com.EBiz
7

{
8
public class ConnectionHelper
9
{
10
public static string GetConnectionString()
11
{
12
return "Data Source=TECH-ROBERT;Initial Catalog=ICHUB_Test;User ID=sa;Password=lq430781";
13
}
14
public static void BeginTrans()
15
{
16
DataService.DBObject.BeginTrans(GetConnectionString());
17
}
18
public static void CommitTrans()
19
{
20
DataService.DBObject.CommitTrans(GetConnectionString());
21
}
22
public static void RollTrans()
23
{
24
DataService.DBObject.RollTrans(GetConnectionString());
25
}
26
public static System.Data.DataTable ExecuteSQL(string sql)
27
{
28
return (System.Data.DataTable)DataService.DBObject.ExecuteSql(sql, GetConnectionString());
29
}
30
public static void ExecuteNonQuery(string sql)
31
{
32
DataService.DBObject.ExecuteSql(sql, GetConnectionString());
33
}
34
}
35
}
36
GetConnectionString的连接改为你的数据库,就可以了。
好了,现在来解释一下,新增,修改,删除的代码了:
1
Guid m_id
=
Guid.NewGuid();
2

3
//
新增Person的代码
4
com.test.Person m_newperson
=
new
com.test.Person();
5
m_newperson.id
=
m_id;
6
m_newperson.name
=
"
Test
"
;
7
m_newperson.Save();
8

9
//
修改Person的代码
10
com.test.Person m_edit_person
=
new
com.test.Person(m_id);
11
m_edit_person.name
=
"
modified
"
;
12
m_edit_person.Save();
13

14
//
删除Person的代码
15
com.test.Person m_del_person
=
new
com.test.Person(m_id);
16
m_del_person.Delete();
简单吧。
如果要得到更详细的信息,请进入
http://vcsproject.com/forums/default.aspx
如果想和NHibernate比较,请进入
http://abluedog.cnblogs.com/archive/2006/04/15/375862.html
请支持中国人的框架