EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:首先在XAF中使用实体框架代码

本主题演示如何在DbContext上下文中使用业务模型创建简单的XAF应用程序。

注意
  • 本主题演示了可由解决方案向导自动生成的代码。如果要在现有XAF解决方案中实现演示的功能,请继续。如果要创建新的XAF解决方案,请改用向导。

  • XAF附带的EFDemoCodeFirst应用程序中提供了一个更复杂的示例。
提示

DevExpress代码示例数据库(http://www.devexpress.com/example=E4375)中提供了完整的示例项目。

1.创建一个XAF应用程序

使用DevExpress v 19.2 XAF解决方案向导创建一个名为MySolution的新XAF解决方案。在“选择ORM”步骤中首先选择“实体框架代码”,然后单击“完成”。

2.添加实体数据模型和上下文

在本主题中,我们将不详细描述实体和上下文实现,因为它已在MSDN中进行了描述(请参阅“新数据库的代码优先”)。在这里,我们假设您已经熟悉在代码中创建EF数据模型。

  • 模块项目中,实现以下EmployeeTask类。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    using DevExpress.Persistent.Base;
    // ...
    [DefaultClassOptions, ImageName("BO_Employee")]
    public class Employee : INotifyPropertyChanged
    {
        private int id;
        [Browsable(false)]
        public int Id { 
            get { return id; }
            protected set {
                if (id != value) {
                    id = value;
                    OnPropertyChanged();
                }
            }
        }
        private string firstName;
        public string FirstName {
            get { return firstName; }
            set {
                if (firstName != value) {
                    firstName = value;
                    OnPropertyChanged();
                }
            }
        }
        private string lastName;
        public string LastName {
            get { return lastName; }
            set {
                if (lastName != value) {
                    lastName = value;
                    OnPropertyChanged();
                }
            }
        }
        private DateTime? birthday;
        public DateTime? Birthday {
            get { return birthday; }
            set {
                if (birthday != value) {
                    birthday = value;
                    OnPropertyChanged();
                }
            }
        }
        private List<Task> tasks;
        public virtual List<Task> Tasks {
            get { return tasks; }
            set {
                if (tasks != value) {
                    tasks = value;
                    OnPropertyChanged();
                }
            }
        }
        #region INotifyPropertyChanged members
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged([CallerMemberName] string propertyName = null) {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
    }
    

    INotifyPropertyChanged的接口允许时,他们的属性值改变了你接收来自业务类的通知。

    在此代码中,您会看到使用会影响UI生成的数据注释-DefaultClassOptionsAttributeImageNameAttributeFieldSizeAttribute以及标准的.NET Browsable属性。结果,将创建EmployeeTask导航项,将使用内置图像库中的图标,将为Task.Description属性显示多行编辑器,并且服务ID属性在UI中不可见。

    注意

    您可以使用EF Power Tools来对现有数据库进行反向工程,而无需手动编写代码。

  • 实现以下DbContext后代。

    using System.Data.Entity;
    // ...
    public class MyDbContext : DbContext {
        public MyDbContext(string connectionString) : base(connectionString) { }
        public DbSet<Employee> Employees { get; set; }
        public DbSet<Task> Tasks { get; set; }
    }
    

请注意,MyDBContext类应实现一个带有connectionString字符串参数的构造函数。EFObjectSpaceProvider对象空间提供程序将在内部调用此构造函数。

3.使用实体框架对象空间提供程序

若要使用EFObjectSpace实例访问应用程序中的数据,请修改WinApplication.cs(WinApplication.vb)和WebApplication.cs(WebApplication.vb)文件中的CreateDefaultObjectSpaceProvider方法的默认实现。有关此代码的详细信息,请参阅“使用实体框架数据模型”主题。

using DevExpress.ExpressApp.DC;
using DevExpress.ExpressApp.EF;
// ...
protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args) {
    args.ObjectSpaceProvider = new EFObjectSpaceProvider(typeof(MyDbContext), args.ConnectionString);
}

4.指定数据库的连接字符串

若要连接为数据模型生成的数据库,请在代码中指定XafApplication.ConnectionString属性,或使用WinForms和ASP.NET应用程序项目中的App.configWeb.config文件中的相应选项。有关详细信息,请参阅“将XAF应用程序连接到数据库提供程序”主题。

5.运行应用程序

现在,您可以同时运行Windows窗体和ASP.NET应用程序。您将看到为您的数据模型自动生成了一个UI。

Windows表单:

EF_RuntimeWin

ASP.NET:

EF_RuntimeWeb

注意

若要学习如何用预定义的数据填充数据库,请参阅“如何:为实体框架数据模型提供初始数据”主题。

相关文章

转载保留此链接,注明出处