luoqing

导航

VCS Framework Step by Step (一)

由于现在框架数NHibernate最流行,我就以NHibernate为例,介绍VCS Framework的使用方法,本人站在中间立场不评价NHibernate的好坏,如果大家感兴趣,我专门开设一个论坛(http://vcsproject.com/forums/16/ShowForum.aspx),可以放手去评论。

首先讲述一下使用本框架的基本软件环境:

    1、VCS Framework当前的版本是0.9(由于生成器依赖于Codesmith),下载地址:https://files.cnblogs.com/luoqing/src.rar
    2、Code Smith http://www.codesmithtools.com/
    3、生成器https://files.cnblogs.com/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 = OFFON [PRIMARY]
ON [PRIMARY]

GO
SET ANSI_PADDING OFF

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

点一下步

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

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

其中Person.cs(主要用于写业务逻辑,显得清楚)的代码是:

 1using System;
 2using com.Robert.Framework;
 3using Robert.DataService;
 4
 5
 6namespace 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

        
        
Operation

        
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”,由于这三个工程是我在框架里加入的样例代码。

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using Robert.DataService;
 5
 6namespace 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
请支持中国人的框架

posted on 2006-04-16 10:54  罗青  阅读(1131)  评论(2编辑  收藏  举报