EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

使用实体框架数据模型

本主题描述如何使用在XAF的DbContextObjectContext实体容器内创建的实体框架(EF)业务模型。业务模型可以用代码实现(“代码优先”方法),在Entity Framework Designer中设计(“模型优先”方法)或为现有数据库生成(“数据库优先”方法)。

指定实体容器(上下文)

所述EFObjectSpace对象实现IObjectSpace接口,它包装的实体容器。要始终通过EFObjectSpace访问XAF应用程序的数据,请修改位于WinApplication.cs(WinApplication.vb)和WebApplication.cs(WebApplication.vb)文件中的CreateDefaultObjectSpaceProvider方法的默认实现。

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

在上面的代码段中,将MyDbContext替换为您的实体容器的类型。如果使用“代码优先”方法,则实体容器类型就是DbContext后代的类型。如果使用“模型优先”,那么将在“实体框架设计器”中通过“实体容器名称”属性指定容器类型。

在实体框架中,DbContextObjectContext用于创建和管理数据。在XPO中,有一个具有相同功能的Session类。在XAF中,对象空间用于处理特定数据层提供的数据。通常,对象空间实现IObjectSpace接口,如果使用实体框架,则包装DbContext / ObjectContext,如果使用XPO,则包装Session

指定数据库连接

在XAF应用程序中,可以通过以下方式之一指定数据库连接(请参阅将XAF应用程序连接到数据库提供程序)。

为了支持在应用程序配置文件中或通过XafApplication.ConnectionString属性指定的连接字符串,实体容器应实现一个带有connectionString参数的构造函数。EFObjectSpaceProvider将在内部调用此构造函数。

public class MyDbContext : DbContext {
    public MyDbContext(string connectionString) : base(connectionString) { }
    // ...
}

如果使用XafApplication.Connection属性而不是连接字符串,则不需要此构造函数。

将实体添加到UI

要在导航系统中显示您的实体,请将DefaultClassOptionsAttributeNavigationItemAttribute添加到其实现中。要从UI隐藏关键属性,请对其应用Browsable(false)属性。您也可以应用其他内置属性

注意
  • 在XAF模块中实现的实体会自动添加到“导出到XLS”中,并参与UI的构建过程。如果您的数据模型位于不是XAF模块的外部程序集中,请参阅“主从模式相关元素”主题。
  • 当前,有关EF类及其属性的元数据信息在设计时不会传播到模型编辑器。结果,诸如Filter Builder之类的工具无法显示对象结构。解决方法在“设计时模型编辑器”凭单的“ EF-显示数据模型”属性中提供。我们将考虑在将来的XAF版本中支持此方案。

有关代码优先教程,请参见如何:在XAF中使用实体框架代码优先。您还可以查看XAF附带的EFDemoCodeFirst演示应用程序。默认情况下,此演示安装到%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ EFDemoCodeFirst文件夹中。

相关文章

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