我可以阻止实体框架AddOrUpdate覆盖某些字段吗

本文关键字:字段 覆盖 AddOrUpdate 实体 框架 我可以 | 更新日期: 2023-09-27 18:28:18

我在实体框架迁移配置文件的种子方法中生成了一些数据,如下所示:

    public void DoSeed(eVendContext context) {
        //add a test station
        context.Stations.AddOrUpdate(
          p => p.Name,
          new eVendDbDataModel.Models.Station() {
              Name = "Test Station 1",
              Active = true,
              Created = DateTime.Now,
              Modified = DateTime.Now,
              Returnable = false,
              Type = "Test",
              PortNo = "COM1",
              Parse = false,
              UseJob = true,
              UseDept = true,
              JobAlias = "Job Number",
              DeptAlias = "Department",
              SiteId = 1
          });
        context.SaveChanges();
    }

在应用程序启动时,我称这种方法为:

        //Always update database to latest version
        Database.SetInitializer<eVendContext>(new MigrateDatabaseToLatestVersion<eVendContext, Configuration>());

然后为了进行测试,我将直接进入数据库并将JobAlias更改为false。问题是,下次我运行应用程序时,会调用种子方法(即使没有挂起的迁移)并更新我的数据,从而再次将JobAlias固定为true

有没有一种方法可以轻松地停止这种行为,这样我就可以在下次运行时修改我的数据库数据而不会被覆盖?

我可以阻止实体框架AddOrUpdate覆盖某些字段吗

您可以检查此表中是否已经有任何数据,以防止其种子,如下所示:

protected override void Seed(eVendContext context) 
{
    if (!context.Stations.Any())
    {   
          context.Stations.AddOrUpdate(p => p.Name,
          new eVendDbDataModel.Models.Station() {
              Name = "Test Station 1",
              Active = true,
              Created = DateTime.Now,
              Modified = DateTime.Now,
              Returnable = false,
              Type = "Test",
              PortNo = "COM1",
              Parse = false,
              UseJob = true,
              UseDept = true,
              JobAlias = "Job Number",
              DeptAlias = "Department",
              SiteId = 1
          });
        context.SaveChanges();
    }
}