XAF EFCore 示例
前言
在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 示例的更多相关文章
- XAF导航系统介绍
Navigation System 导航系统 10 min to read 阅读时长10分钟 This topic introduces the concept of the navigation s ...
- XAF点滴:很具体很用实用---处理三个小问题
以下内容全部为web版本的老模板风格下完成. 一.在编辑状态的详细视图下打印报表. 有些时候,需要在编辑状态下直接打印报表内容,官方默认是不允许这样做的.用Reflector查看源码,可以看到: De ...
- XAF How to: 实现一个WCF Application Server 并配置它的客户端应用
本主题描述了如何实现一个 WCF 中间层应用程序服务器及如何配置 XAF客户端连接到此服务器. 注意 本主题演示可以由解决方案向导自动生成的代码.执行操作时,如果你想要在现有的 XAF 解决方案中实现 ...
- XAF使用数据库访问层缓存的提升性能
很多时候,为了提升性能,我们可以给数据库访问层做缓存. 以下几步可以完成这个任务:1. 使用自定义的 XPObjectSpaceProvider1.1. 创建自定义的 XPObjectSpacePro ...
- XAF应用开发教程(七)外观控制模块
很多时候,我们需要按照不同的条件显示不同的效果,在传统的软件开发中,我们会直接使用 控件名称.BackColor,Enable,Visible等属性进行控制. 如果一个业务对象在多处使用,要么我们会去 ...
- XAF应用开发教程(四)应用程序模型
XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方 ...
- XAF应用开发教程(三)业务对象模型之引用类型与关联关系
本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类 ...
- XAF应用开发教程(二)业务对象模型之简单类型属性
使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...
- XAF应用开发教程(一) 创建项目
XAF是DevExpress公司的快速开发框架,全称eXpress Application Framework,是企业信息系统的开发利器,快速开发效果显著,在.net框架中,笔者至今没有找到一款可以与 ...
- Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库
前言 在 .Net Core 2.2中 Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从 NuGet 仓 ...
随机推荐
- 东吴名贤传<二>薛综传
古典记载 吴录曰:其先齐孟尝君封於薛.秦灭六国,而失其祀,子孙分散.汉祖定天下,过齐,求孟尝后,得其孙陵.国二人,欲复其封.陵.国兄弟相推,莫適受,乃去之竹邑,因家焉,故遂氏薛.自国至综,世典州郡, ...
- 本地Nuget包管理
nuget.org有时候会抽风,VS无法自动下载程序包.这时,我们可以配置本地nuget包搜索路径. 1 下载Nuget package 以anycad rapid sdk为例,可以先从百度云盘下载最 ...
- Pandas 人口密度案例分析
from turtle import left import pandas as pd """ 需求: 1.导入文件,查看原始数据 2.将人口数据和各州简称数据进行合并 ...
- NC16544 简单环
题目链接 题目 题目描述 给定一张n个点m条边的无向图,求出图中所有简单环的数量.(简单环:简单环又称简单回路,图的顶点序列中,除了第一个顶点和最后一个顶点相同外,其余顶点不重复出现的回路叫简单回路. ...
- NC17871 CSL分苹果
题目链接 题目 题目描述 CSL手上有n个苹果,第i个苹果的质量是wi,现在他想把这些苹果分给他的好朋友wavator和tokitsukaze.但是CSL为了不让他们打架,根据质量决定尽量地均分成两堆 ...
- 详解最新版RabbitMQ 基于RPM 方式的安装
如何选择安装版本 已经不支持的发布系列 版本 最后补丁版本 首次发布时间 停止更新时间 3.7 3.7.28 2017年11月28日 2020年09月30日 3.6 3.6.16 2015年12月22 ...
- nginx 基于IP的多虚拟主机配置
1.基于IP的多虚拟主机配置 1.1 网络配置 linux操作系统支持IP别名的添加. nginx 服务器提供的每台虚拟主机对应配置一个不同的IP,因此需要将网卡设置为同时能够监听多个IP地址. 先查 ...
- colrm命令
colrm命令 colrm命令用于编辑源代码文件,脚本文件或常规文本文件中的文本,此命令从文件中删除选定的列,列定义为一行中的单个字符.索引总是从1开始,而不是0.如果同时指定了开始和结束,则它们之间 ...
- Uniapp+Nodejs实现外卖App项目1-项目介绍
项目介绍 本项目采用uniapp和nodejs(数据接口).mongodb等技术实现了一个类似美团外卖的简易APP.项目主要目的是为了快速上手,如何快速使用uniapp开发一个app项目,同时掌握一些 ...
- [攻防世界][江苏工匠杯]file_include
打开靶机url,上来就是代码审计 <?php highlight_file(__FILE__); include("./check.php"); if(isset($_GET ...