ORMAPPING出来已经很多年了,之前一直有关注,但一直没有应用到项目中去,众所周知,ORMAPPING的性能是很大一个问题,虽然它节省代码量,为程序员做了很多工作。而且ORMAPPING主要应用在JAVA领域,.NET领域用到的少之又少,最近公司要做一个内部的资产管理系统,我就打算用ORMAPPING来做,对几种ORMAPPING的框架我进行了比较,第一,nhibernate这个我相信大家比较熟悉了,nhibernate在JAVA领域已经应用相当广泛了,nhibernate最持久层性能稳定,本来我也打算采用,但后来选择放弃,主要是他生成的一堆XML我很头疼,不大好管理,这里很多人会给nhibernate辩解,我一直以为nhibernate是JAVA的东西,害怕性能问题。还有一个ORMAPPING的框架ibatis,这个其实也不错,但最终我选择了XPO,XPO是著名软件公司devexpress的产品,它的应用简单方便,好了,废话少说,进入正题,今天就是讲ORMAPPING在XPO框架中的应用。
在讲应用之前,先解析一下ORMAPPING的概念有助于读者更好的理解代码,ORMAPING其实是object ralation mapping其实就是对象关系映射,说白了就是把类映射到表,或者说把表在程序里看成一个对象,更好的面向对象。ORMAAPING最重要的一些概念持久层,持久化工厂等等,各位自己去找资料,在此不详细说明。
下面我做一个例子,实现表的新增修改查询。
这里我建两个表,一个是主表,一个是从表,它们之间是一对多的关系。基于ORMAPPING的概念,我先建两个类,继承于XPOBJECT。
Code
namespace MyFirstMapping
{
public class User:XPObject
{
public User(Session session) : base(session) { }
private string accountName;
private string realName;
private string userPwd = "U";
public string AccountName
{
get { return accountName; }
set { accountName = value; }
}
public string RealName
{
get { return realName; }
set { realName = value; }
}
public string UserPwd
{
get { return userPwd; }
set { userPwd = value; }
}
[Association("MyRalation", typeof(UserDetail))]
public XPCollection UserDetailss { get { return GetCollection("UserDetailss"); } }
}
}
Code
namespace MyFirstMapping
{
public class UserDetail:XPObject
{
public UserDetail(Session session) : base(session) { }
private string accountName;
private string address;
public string AccountName
{
get { return accountName; }
set { accountName = value; }
}
public string Address
{
get { return address; }
set { address = value; }
}
[Association("MyRalation")]
public User user;
}
}
注意这两个类,我在构造函数里注入了Session,同时建立了他们的关系。这样他们之间的映射关系就建立好了。
现在我们对app.config添加数据库的配置信息,然后我们需要建一个类,用来创建SESSION
Code
namespace MyFirstMapping
{
using DevExpress.Xpo;
using DevExpress.Xpo.DB;
/// <summary>
/// 这个类是用于创建新的Session
/// </summary>
public class SessionOperation
{
public Session CreateSession(string conn)
{
AutoCreateOption option = AutoCreateOption.DatabaseAndSchema;
IDataStore connectionProvider = XpoDefault.GetConnectionProvider(ConfigurationManager.ConnectionStrings[conn].ConnectionString, option);
IDataLayer dataLayer = new SimpleDataLayer(connectionProvider);
Session session = new Session(dataLayer);
return session;
}
}
}
这样我们的Session工厂就建立好了,需要用session的时候直接到这个工厂里取就行了,大家注意 AutoCreateOption option = AutoCreateOption.DatabaseAndSchema; 我这里选择的是DatabaseAndSchema,各位可以根据自己需要进行创建,接下来我们开始对表进行增删改查的操作。
Code
//多表新增
private void userNewButton_Click(object sender, EventArgs e)
{
SessionOperation sessionOperation = new SessionOperation();
Session session = sessionOperation.CreateSession("MyCon");
User user = new User(session);
user.AccountName = txtAccount.Text;
user.RealName = txtUserName.Text;
/*这里是单表操作的代码,由于我修改成多表操作了,这里标注一下
* User user = new User(session);
user.AccountName = txtAccount.Text;
user.RealName = txtUserName.Text;
* user.Save();
*/
UserDetail userDetail1 = new UserDetail(session);
userDetail1.AccountName = txtAccount.Text;
userDetail1.Address = txtAddress.Text;
user.UserDetailss.Add(userDetail1);
user.Save();
MessageBox.Show("新增成功");
}
很简单吧,其实ORMAPPING关键是概念的掌握,本人写BLOG比较懒,呵呵,贴上代码,希望能起到抛砖引玉的作用~~~~~~~~~~~
下载请点这里