前言

在DEV官方建议创建新的XAF项目推荐选择EFCore时,我也第一时间创建了XAF的EFCore项目,这也是我第一次创建这个类型的项目,之前一直使用XPO,避免不了要对比一下。如果熟悉XPO但不了解EFCore的小伙伴来说,会有些迷茫,再加上通过向导创建的项目并不是开箱即用,还需要进行配置,可能会打击想了解EFCore小伙伴的积极性,下面我会简单的讲解一下XAFEFCore项目创建及配置的过程。示例项目放到了gitee中,https://gitee.com/easyxaf/xaf_efcore_sample

创建

创建的过程比较简单,与XPO版本的一样,甚至在22.5版本中,向导已默认选择了EFCore。项目结构也与XPO的保持一致,主要差别是在BusinessObjects文件夹中,同时多了一个XAF_EFCore_SampleDbContext类,这个是EFCore的DbContext,类似XPO的Session。

运行

如果熟悉XPO的小伙伴会直接运行,直接运行也是可以的,但事后数据迁移会麻烦,下面我们用EFCore的方式来启动这个项目。

首先我们在主项目(XAF_EFCore_Sample.Blazor.Server)中添加Microsoft.EntityFrameworkCore.Tools包,这样我们就可以直接使用Add-Migration、Update-Database等迁移工具

你可以在程序包管理器控制台中输入Install-Package Microsoft.EntityFrameworkCore.Tools -Version 6.0.3,注意:版本是6.0.3,默认项目选择 XAF_EFCore_Sample.Blazor.Server,后面还会用到程序包管理器控制台

如果现在直接运行数据迁移它会报错,我们还需要配置一下,打开XAF_EFCore_SampleDbContext这个文件,找到XAF_EFCore_SampleDesignTimeDbContextFactory这个类

它上面已经有了说明,我们需要将异常及注释移除

现在我们就可以进行数据迁移了,打开程序包管理器控制台,输入Add-Migration Initialize_Database,默认项目选择 XAF_EFCore_Sample.Module,这样在XAF_EFCore_Sample.Module项目下会多出一个Migrations文件夹,打开20230518004940_Initialize_Database.cs这个文件,里面有数据迁移的代码,感兴趣的可以看一下。

Add-Migration命令是用于添加数据迁移代码文件,Initialize_Database是给这个迁移文件起的名字

下面我们需要更新数据库,在程序包管理器控制台中,输入Update-Database,这样就可以将我们之前的数据迁移执行到数据库中了,现在可以直接运行项目了,运行起来与XPO版本的没有什么区别。

如果我们要向ApplicationUser类中添加属性,我们需要重复前面的步骤,这个与XPO不同,XPO是自动迁移,而EFCore需要手动操作。我们下面向ApplicationUser类中添加Image属性,为用户添加一个图像

EFCore属性的写法与XPO也不一样,注意要加上virtual,这样XAF可以通过代理的方式来监听属性的变化,XAF文档中有一篇关于EFCore与XPO的比较 https://docs.devexpress.com/eXpressAppFramework/404186/why-we-recommend-ef-core-over-xpo

下面我们需要在程序包管理器控制台中,输入Add-Migration AddUserImage,执行完后,再次输入Update-Database,注意默认项目为XAF_EFCore_Sample.Module,运行后的效果

改造

下面我们改造一下,在XAF_EFCore_SampleDesignTimeDbContextFactory中,我们需要硬编码的方式指定数据库连接参数,这样我们在修改配置文件后,还要修改这个连接参数,下面我们直接用读取配置文件的方式来获取数据库连接参数

在XAF_EFCore_Sample.Module项目中添加包Microsoft.Extensions.Configuration.Json,注意版本号为6.0.0,修改后的代码

最后

EFCore现在已是dotnetcore的主流ORM框架,再加上XPO早已处于维护状态,在XAF中使用EFCore应该是大势所趋,但已在运行的XPO项目不建议切换到EFCore,因为它们之间还有很多的不同,新的项目可以考虑采用EFCore。

https://www.cnblogs.com/haoxj/p/17410846.html

XAF EFCore 示例的更多相关文章

  1. XAF导航系统介绍

    Navigation System 导航系统 10 min to read 阅读时长10分钟 This topic introduces the concept of the navigation s ...

  2. XAF点滴:很具体很用实用---处理三个小问题

    以下内容全部为web版本的老模板风格下完成. 一.在编辑状态的详细视图下打印报表. 有些时候,需要在编辑状态下直接打印报表内容,官方默认是不允许这样做的.用Reflector查看源码,可以看到: De ...

  3. XAF How to: 实现一个WCF Application Server 并配置它的客户端应用

    本主题描述了如何实现一个 WCF 中间层应用程序服务器及如何配置 XAF客户端连接到此服务器. 注意 本主题演示可以由解决方案向导自动生成的代码.执行操作时,如果你想要在现有的 XAF 解决方案中实现 ...

  4. XAF使用数据库访问层缓存的提升性能

    很多时候,为了提升性能,我们可以给数据库访问层做缓存. 以下几步可以完成这个任务:1. 使用自定义的 XPObjectSpaceProvider1.1. 创建自定义的 XPObjectSpacePro ...

  5. XAF应用开发教程(七)外观控制模块

    很多时候,我们需要按照不同的条件显示不同的效果,在传统的软件开发中,我们会直接使用 控件名称.BackColor,Enable,Visible等属性进行控制. 如果一个业务对象在多处使用,要么我们会去 ...

  6. XAF应用开发教程(四)应用程序模型

    XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方 ...

  7. XAF应用开发教程(三)业务对象模型之引用类型与关联关系

    本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类 ...

  8. XAF应用开发教程(二)业务对象模型之简单类型属性

    使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...

  9. XAF应用开发教程(一) 创建项目

    XAF是DevExpress公司的快速开发框架,全称eXpress Application Framework,是企业信息系统的开发利器,快速开发效果显著,在.net框架中,笔者至今没有找到一款可以与 ...

  10. Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库

    前言     在 .Net Core 2.2中 Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从 NuGet 仓 ...

随机推荐

  1. 【主流技术】实战之 Spring Boot 中集成微信支付(小程序)

    前言 微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的. 以下是经过真实商业项目实践的集成步骤,包括注册流程.调用过程.代码demo(经过脱敏)等,希望我的分享 ...

  2. 离线生成双语字幕,一键生成中英双语字幕,基于AI大模型,ModelScope

    制作双语字幕的方案网上有很多,林林总总,不一而足.制作双语字幕的原理也极其简单,无非就是人声背景音分离.语音转文字.文字翻译,最后就是字幕文件的合并,但美中不足之处这些环节中需要接口api的参与,比如 ...

  3. 可选可输入的input框

    <input type="text" list="note" autocomplete="off"> <datalist ...

  4. ZR 七连 Day 1 游记

    ZR 七连 Day 1 游记 游记篇 赛前搞笑事件 今天是第一场正睿,还是要 好好对待 的 $ 17:59:58 $ 还在吃饭 $ 17:59:59 $ 做出重要决定,先打着比赛,有空就吃一口包子 $ ...

  5. 小知识:什么叫做workaround?

    技术人当遇到具体问题,能给出的各种解决方案,有一种类型叫做workaround,翻译过来通常为"应变方法"."变通方法": 其实这种方式通常是没有找到根本的解决 ...

  6. 使用SecureCRT的按钮实现快速查询

    背景:有这么个日常运维场景,客户因管理需求,不允许在服务器上部署任何自动化的脚本,需要人工登录到机器上查询ASM磁盘组的使用率情况,有上百套环境. 使用的工具是SecureCRT,如何提升一些效率呢? ...

  7. Excel中文本型数字转换为数值型数字的方法

    背景 工作中经常遇到需要将Excel中的内容进行求和或者其他计算,但是由于格式为文本,无法进行计算和求和. 单元格的左上角都有绿色小三角,且用自动求和公式计算无法计算结果,显示为0,说明单元格格式为文 ...

  8. 源码剖析Spring依赖注入:今天你还不会,你就输了

    在之前的讲解中,我乐意将源码拿出来并粘贴在文章中,让大家看一下.然而,我最近意识到这样做不仅会占用很多篇幅,而且实际作用很小,因为大部分人不会花太多时间去阅读源码. 因此,从今天开始,我将采取以下几个 ...

  9. Redhat7更改网易yum源

    说明 之前写了一篇关于Redhat6更换Yum源的文章,时隔已久很多包都变了,正好最近搭建环境需要用到Redhat7.3所以就再记录一下如何更换为国内最新最常用的yum源. 操作步骤 1.卸载系统自带 ...

  10. nginx配置反向代理缓存

    说明 最近运维一个网站里面含有不经常变化的小图片,而每次请求都需要调用file接口获取不太合适.所以就想利用nginx的反向代理缓存来减轻服务接口的请求压力. 工作原理 Nginx反向代理缓存,当客户 ...