【发布时间】:2019-05-24 13:59:44
【问题描述】:
情况如下:
我有一个为零件创建机器程序的服务器。我的基础架构如下所示:
- WillyDemandes:请求为零件创建程序
- WillyMachines(与 FK 的 WillyDemandes 相关):每个机器程序 为这部分创建的。
- WillyResults(与 FK 的 WillyMachines 相关):每个警告, 结果,机器的输出。
服务器拉出第一个 WillyDemandes 进行处理:
static public WillyDemandes GetFirst()
{
WillyDemandes willyDemandes;
using (Info_IndusContext db = new Info_IndusContext())
{
willyDemandes = db.WillyDemandes
.Include(x => x.IdPartNavigation)
.Where(x => x.Statut == Statuts.EnTest.ToString() && x.Username == Environment.UserName)
.OrderBy(x => x.Priority)
.ThenBy(x => x.Id)
.FirstOrDefault();
if (willyDemandes != null)
{
willyDemandes.Statut = Statuts.EnTraitement.ToString();
willyDemandes.ServerName = Environment.MachineName;
willyDemandes.DateDebut = DateTime.Now;
db.SaveChanges();
}
}
return willyDemandes;
}
然后服务器向零件添加新机器(new WillyMachines to WillyDemandes)
static public WillyMachines Create(WillyDemandes willyDemandes, string MachineName)
{
using (Info_IndusContext db = new Info_IndusContext())
{
WillyMachines willyMachines = willyDemandes.WillyMachines.Where(x => x.DocumentType == MachineName).FirstOrDefault();
if (willyMachines == null)
{
willyMachines = new WillyMachines() { IdDemande = willyDemandes.Id, DocumentType = MachineName };
willyDemandes.WillyMachines.Add(willyMachines);
}
willyMachines.DateDebut = DateTime.Now;
willyMachines.DateFin = null;
willyMachines.Performance = null;
willyMachines.Statut = Statuts.EnTraitement.ToString();
db.SaveChanges();
return willyMachines;
}
}
问题是每当我执行前面的代码时,SaveChanges 都会说上下文没有改变,willyMachines 的 ID 保持在 0,而不是获取数据库应该给他的增量 ID。因此,我做了以下补丁作为解决方法(添加到 context.WillyMachines 而不是导航属性并刷新 WillyDemandes)
static public WillyMachines Create(WillyDemandes willyDemandes, string MachineName)
{
using (Info_IndusContext db = new Info_IndusContext())
{
WillyMachines willyMachines = willyDemandes.WillyMachines.Where(x => x.DocumentType == MachineName).FirstOrDefault();
if (willyMachines == null)
{
willyMachines = new WillyMachines() { IdDemande = willyDemandes.Id, DocumentType = MachineName };
db.WillyMachines.Add(willyMachines);
}
willyMachines.DateDebut = DateTime.Now;
willyMachines.DateFin = null;
willyMachines.Performance = null;
willyMachines.Statut = Statuts.EnTraitement.ToString();
db.SaveChanges();
willyDemandes = WillyDemandesController.Refresh(willyDemandes);
return willyMachines;
}
}
static public WillyDemandes Refresh(WillyDemandes willyDemandes)
{
using (Info_IndusContext db = new Info_IndusContext())
{
return db.WillyDemandes
.Include(x => x.IdPartNavigation)
.Include(x => x.WillyMachines).ThenInclude(x => x.WillyResults)
.Where(x => x.Id == willyDemandes.Id)
.FirstOrDefault();
}
}
为什么我的上下文没有看到 WillyDemandes 的变化?我应该事先将 WillyDemandes 附加到上下文中吗?我应该去找别的东西吗?我的解决方案可行吗?
谢谢
【问题讨论】:
标签: c# sql-server entity-framework-core