XPO(eXpress Persistent Objects)DevExpress开源的ORM框架,是对象和关系数据库之间的桥梁。使用XPO可以大大简化对数据库操作。
XPO还支持WCF - 使用IDataStore, ICachedDataStore和ISerializableObjectLayer 提供者, 这样就不直接连接数据库,而可通过WCF services获取数据对象。
例如:在企业环境下,核心数据库并不希望对不同的业务系统开放。此时使用编写一个WCF服务作为应用服务器,就可以避免数据库直接暴露出来,同时还可以在应用服务器端实现统一的认证管理。
具体实现:
步骤1:编写WCF服务
创建一个“WCF服务应用程序”,引用DevExpress.Data.V18.2和DevExpress.Xpo.V18.2,修改.svc文件。
public class ExamWcfService : DataStoreService
{
public static IDataStore DataStore;
static ExamWcfService()
{
string dbs = ConfigurationManager.AppSettings["dbserver"];
string user = ConfigurationManager.AppSettings["user"];
string password = ConfigurationManager.AppSettings["password"];
string db = ConfigurationManager.AppSettings["db"];
string connectionString = MSSqlConnectionProvider.GetConnectionString(dbs,user,password,db);
DataStore = XpoDefault.GetConnectionProvider(connectionString, AutoCreateOption.SchemaOnly);
}
public ExamWcfService() : base(DataStore)
{
}
}
说明:
(1)从DataStoreService继承。
(2)编译后,将WCF服务应用部署到IIS上。
(3)此时WCF服务作为数据提供者。
步骤2:创建一个类库项目,用于产生XPO实体类
引用DevExpress.Data.V18.2和DevExpress.Xpo.V18.2。
利用ORM Data Model向导,直接根据数据表产生XPO实体类。编译产生实体类DLL文件。
步骤3:编写客户端,从WCF获取数据(XPO对象)
引用步骤2创建的实体类DLL,引用DevExpress.Data.V18.2和DevExpress.Xpo.V18.2。
string connstr = "http://10.127.0.15:8080/wcf/ExamWcfService.svc";
XpoDefault.DataLayer = XpoDefault.GetDataLayer(connstr,AutoCreateOption.SchemaOnly);
Customer cus = new Customer(XpoDefault.Session);
cus.CompanyName = "scetc";
cus.Save();
using (UnitOfWork uow = new UnitOfWork())
{
using (XPCollection<Admins> customers = new XPCollection<Admins>(uow))
{
foreach (Admins customer in customers)
{
Console.WriteLine("Company Name = {0}; ContactName = {1}", customer.Admin, customer.Classroom);
}
}
}
说明:传统XPO的数据提供者为不同类型的数据库。如访问MSSQL服务器的连接字符串写法
string connstr=MSSqlConnectionProvider.GetConnectionString(sqlserverip,username,password,db);