WalkingTec.Mvvm框架(简称WTM)是基于asp.net core EF+MVVM下为数不多的面向后端开发者自动生成前、后端代码的免费开源框架,特别适合个人开发者面向中小企业快速开发软件。
由于框架不能自动迁移数据。一般在生成数据库后,再遇到数据库结构发生变化,只有删除数据库,再让框架自动重新生成,这重新一生成,原来用的测试数据,就不见了,如果里面有正式数据,这个方法就更不可取了。
如果用官方文档介绍的方法,直接用EF数据迁移命令生成数据库,数据库里没有一条数据,调试时无法要登录进项目页面,只能手动添加数据,非常麻烦。
下面介绍一种即能框架的初始化数据和EF迁数据两不误的方法
一、使用EF提供的命令行工具,生成数据库
EF Core提供了一些命令行工具来进行数据同步,比如add-migration, update等,具体可以参考微软文档
EF Core的原理是通过反射寻找代码中的DbContext,找到连接字符串从而确定要操作的数据库。
但是WTM框架支持SqlServer,MySql,PgSql等多种数据库,通过配置文件来决定使用哪种,而EF是不知道应该去哪里找的
这种情况下,我们可以使用Design-time DbContext来手工指定需要同步的数据库,具体可以参考微软文档
简单来说,就是在代码中创建一个继承IDesignTimeDbContextFactory的类,例如:
DataContextFactory.cs
public class DataContextFactory : IDesignTimeDbContextFactory<DataContext>
{
public DataContext CreateDbContext(string[] args)
{
return new DataContext(“数据库连接字符串", DBTypeEnum.SqlServer);
}
}
再用add-migration, update生成数据库:


数据库生成后, 数据库里会生成一张表,
, 记住这张也方便重新创建和并恢复表里的数据。 第二、生成框架初始化数据
删除生成的数据库,然后启动项目,让框架自动创建数据库,并初始化数据。
创建数据库表__EFMigrationsHistory
CREATE TABLE [dbo].[__EFMigrationsHistory]( [MigrationId] [nvarchar](150) NOT NULL, [ProductVersion] [nvarchar](32) NOT NULL, CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY CLUSTERED ( [MigrationId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
恢复刚才保存的数据,如
INSERT INTO [dbo].[__EFMigrationsHistory]
([MigrationId]
,[ProductVersion])
VALUES
('20190830092937_InitialCreate'
,'2.2.6-servicing-10079')
GO
这样就大功造成了,之后数据库结构发生变化,就不用删除数据 了,只需要迁移数据即可。
以上方法在SQLServer数据库下测试成功。
WTM:
框架文档地址:http://wtmdoc.walkingtec.cn 文档还在不断完善中。。。 框架QQ交流群:694148336
您可以点这里 http://wtmdoc.walkingtec.cn/setup 在线一键生成WTM的项目,立刻开始体验WTM之美~~~
浙公网安备 33010602011771号