#region 创建数据库
//如果数据库有表,则 EnsureCreated 方法不执行任何操作。
//如果没有数据库,或者没有任何表,则它将创建数据库和架构。
//EnsureCreated 启用以下工作流来处理数据模型更改:
//删除数据库。更改数据模型。重新运行应用。
//EnsureCreated 创建具有新架构的数据库。
//在无需保存数据的情况下,当架构快速发展时,此工作流在早期开发过程中表现良好。
//如果需要保存已输入数据库的数据,情况就有所不同了。 如果是这种情况,请使用迁移。
//程序包管理控制台执行命令删除数据库:Drop-Database -Confirm
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetRequiredService<DataMgrContext>();
//使用migration迁移,注释掉EnsureCreated(),migration会创建迁移记录表(__efmigrationshistory)
//context.Database.EnsureCreated();
//播种,初始化基础数据或者测试数据。
DbInitializer.Initialize(context);
}
#endregion

migration命令:
添加迁移:Add-Migration InitialCreate
更新数据库:Update-Database
执行迁移:Update-Database -Script -SourceMigration:"201901210832533_addTemporaryAttendanceDetail20190121.cs" -TargetMigration:"201902282225506_updatetableColumnName2019-03-01.cs"
第一个参数为你要执行的migration前一个migration的名称,第二个参数为你要执行的最后一个migration,这样设置好以后会将这两个之间的migration生成对应的脚本
EF Core命令:Script-Migration -From migrationName1 -To migrationName2
附加:https://www.cnblogs.com/xsj1989/p/9338518.html

部分更新 参考:http://blog.baibaota.com/1960.html
dto中只有部分需要修改的字段,使用 SetValues 方法自动映射赋值,类似ObjectMapper那样。

public void Save(StudentDto dto)
{
    var stu = _dataContext.Students.Where(x => x.Id == dto.Id).FirstOrDefault();
    var entry = _dataContext.Update<Student>(stu);
    entry.CurrentValues.SetValues(dto);
    _dataContext.SaveChanges();
}

 

posted on 2023-09-20 14:09  邢帅杰  阅读(82)  评论(0编辑  收藏  举报