教程 1 - 使用 XPO 的第一个数据感知应用程序

DevExpress ORM Tool > DevExpress ORM Tool > Getting Started > Tutorial 1 - Your First Data-Aware Application with XPO


在本课程中,将引导您创建一个简单的 WinForm 应用程序,可以在其中输入和查看customer(顾客)的详情。

秀出来
The complete sample project is available in the DevExpress Code Examples database at http://www.devexpress.com/example=E4555. Depending on the target platform type (ASP.NET, WinForms, etc.), you can either run this example online or download an auto-executable sample.


创建持久化对象

使用 eXpress Persistent Objects (XPO) 需要做的第一件事情是定义持久化对象类。持久化对象被存储为数据库表中的记录并且封装了所有的关系。类的属性作为字段值存储至记录之中,并且持久化对象的集合相当于数据表。所需要做的是定义持久化对象类,并且 XPO 会自动生成数据库和所需要的表结构。 XPO 提供了 Data Model Designer(数据模型设计器)以简化持久化类的创建。

启动新的 Windows 窗体应用程序项目。可以使用标准的 Windows 窗体应用程序 项目模板。可以在设计器中(Model First 方法) 或使用代码 (Code First 方法)创建持久化类.。Model First 建议适用于初学者。


Model First

  • 在 Project 菜单中点击 Add New Item 。显示 Add New Item 对话框。

  • 在 DevExpress 目录中,选择 DXperience ORM Data Model Wizard 模板并点击 Add。


  • 在弹出的数据模型向导中,选择 Create a new database 并点击 Next。

  • 指定数据库连接设置并点击 next。在本课中,通过 Windows Authentication 访问 Microsoft SQL Server 的本地实例,并且使用 XpoTutorial1 数据库。



      注意:此时此刻,XpoTutorial1 数据库还不存在。之后将由 XPO 自动创建。

  • 点击 Finish 完成向导。XPO Data Model Designer 将会打开。
  • 在空白的设计器表现右键单击并选择 Properties。在弹出的 属性窗口中指定持久化类的命名空间,例如,XpoTutorial1.DataModel。
         
  • 添加新的持久化类,从工具栏上拖拽 XpObject 项目到设计器。

  • 要指定新类的名称,在方框头部双击 XpObject1 文本并修改为 Customer,或者在弹出的属性窗口中,修改对象的名称的 Name 属性


  • 要添加 Name 持久化属性,从工具栏中拖拽 Field 项目并拖放到 Customer 之上。重命名新添加的字段为 Name

          

  • 以相同的方式,添加 Age 属性。通过属性窗口修改它的  Column Type 为 UInt16。


            注意:默认类型是 string,所以上一步添加的 Name 属性是 string 类型。 

  • 在设计器中保存改变。

    设计器已经创建了 Customer 类的声明,它继承于 XPObject,带有默认的构造函数与对象初始化方法。个体持久化对象 (类的实例),将作为记录存储至 "Customer" 表中,同时类属性(Name 和 Age) 映射到表的字段值。


Code First

作为使用设计器的另外一种选择,可以编写代码手动添加持久化类。以下的  Customer 类代码等同于设计器的实现。

using DevExpress.Xpo;
// ... 
public partial class Customer : XPObject {
    public Customer(Session session) : base(session) { }
    public override void AfterConstruction() { base.AfterConstruction(); }
    string fName;
    public string Name {
        get { return fName; }
        set { SetPropertyValue("Name", ref fName, value); }
    }
    ushort fAge;
    public ushort Age {
        get { return fAge; }
        set { SetPropertyValue("Age", ref fAge, value); }
    }
}

可以使用 DXperience v14.1 ORM Persistent Object 工程项目模板简化此类的创建。该模板创建 XPObject 的派生类并在项目中添加必要的程序集的引用。


数据模型绑定用户界面 
  • 通常使用 XPCollection 或 XPView 从数据库中获取持久化对象。从工具栏上拖拽 XPCollection 组件并放置到窗体之上。使用默认的 Form1.cs(Form1.vb) 窗体,或者通过 DXperience v14.1 Form 模板添加 XtraForm 以保持与 XtraGrid 控件一直的外观。日后将会使用。

     
  • 下一步,指定持久化类至集合的 XPCollection.ObjectClassInfo 属性。如果在下拉窗口中没有该类,重新编译项目并再试。

  • 从工具栏中拖拽 Session 组件并放置至窗体之上。使用属性窗口,将其指定至 XPBaseCollection.Session 属性。

  • XPCollection 可以绑定至可视化控件,因为它实现了标准的 .NET IBindingList and ITypedList 接口。添加 GridControl 控件到窗体上并且指定表格的GridControl.DataSource 属性为 xpCollection1。

      注意:此外,可以设置 GridControl.UseEmbeddedNavigator 属性为 True 启用 Data Navigator。

XPCollection 被指定至表格控件后,表格自动为所有的持久化属性生成列(查看上面的图)。在此例中,有 Name 和 Age 列 (Oid 字段是由 XPO 自动创建的)。因为 XPObject.Oid 值是自动生成,从表格中移除 Oid 列,或者使该列只读以便最终用户无法编辑它。

使用代码创建和持久化对象

处理窗体的 Load 事件,向 Customer 表中添加记录并且填充至 XPCollection。
private void XtraForm1_Load(object sender, EventArgs e) {
    if (xpCollection1.Count == 0) {
        var customer1 = new Customer(session1);
        customer1.Name = "John";
        customer1.Age = 21;
        customer1.Save();
        xpCollection1.Add(customer1);
        var customer2 = new Customer(session1);
        customer2.Name = "Bob";
        customer2.Age = 37;
        customer2.Save();
        xpCollection1.Add(customer2);
    }
}



XPBaseObject.Save 方法会检查 database 是否包含 Customer 表。 (默认情况下,该名称匹配于所保存的对象的名称。)如果这个表不存在,将会被创建。然后它将保存新数据至数据表。

初始化数据库连接

Model First
初始化数据访问层,在应用程序的 Main 方法中,调用 ConnectionHelper.Connect。
using DevExpress.Xpo.DB;
// ... 
[STAThread]
static void Main() {
    ConnectionHelper.Connect(AutoCreateOption.DatabaseAndSchema);
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    DevExpress.Skins.SkinManager.EnableFormSkins();
    Application.Run(new XtraForm1());
}



Code First
通过 ORM Data Model Wizard,ConnectionHelper 类自动添加至项目中。如果你没有使用向导,手动指定 Data Layer 到静态类 XpoDefault.DataLayer 属性替代调用 ConnectionHelper.Connect。
using DevExpress.Xpo;
using DevExpress.Xpo.DB;
// ... 
[STAThread]
static void Main() {
    public const string ConnectionString = 
        @"XpoProvider=MSSqlServer;data source=(local);integrated security=SSPI;initial catalog=XpoTutorial1";
    XpoDefault.DataLayer = XpoDefault.GetDataLayer(ConnectionString, AutoCreateOption.DatabaseAndSchema);
    // … 
}



结果

运行项目。XPO 为持久化对象自动生成数据库。如果数据库不存在,XPO 创建它。用户可以在表格中查看和编辑数据。无需编写任何代码来保存数据:所有的更改都将自动持久化。下图显示结果。

    

  • 创建简单的数据感知应用程序,它可以使最终用户查看和编辑 customer 详情 (name 和 age) 。数据存储在 MS SQL Server 数据库。
  • 声明 Customer 类,其实例表示为 Customer  表的记录。XPO 会自动生成数据库。
  • 添加新记录并保存至 Customer 表。每个记录代表着 Customer 对象。它的公共属性表示表中的字段。
  • 最终用户可以通过 XtraGrid's data navigator (显示在表格的底部)添加新记录。

你可能感兴趣的:(Devexpress_XPO)