我可以阻止实体框架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
。
有没有一种方法可以轻松地停止这种行为,这样我就可以在下次运行时修改我的数据库数据而不会被覆盖?
您可以检查此表中是否已经有任何数据,以防止其种子,如下所示:
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();
}
}