C# 实体框架6无法更新数据库中的列
我正在尝试将子实体(首先是SofiePurchaseOrder代码)附加到父实体(首先是现有DB表中的sofie_dfill代码)。我将实体标记为已修改,但在保存更改并检查数据库后,它没有更改C# 实体框架6无法更新数据库中的列,c#,entity-framework,C#,Entity Framework,我正在尝试将子实体(首先是SofiePurchaseOrder代码)附加到父实体(首先是现有DB表中的sofie_dfill代码)。我将实体标记为已修改,但在保存更改并检查数据库后,它没有更改 public class dfill //yay legacy { public int id { get; set; } //other fields public Guid? PurchaseOrderID { get; set; } public virtua
public class dfill //yay legacy
{
public int id { get; set; }
//other fields
public Guid? PurchaseOrderID { get; set; }
public virtual PurchaseOrder PurchaseOrder { get; set; }
}
public class PurchaseOrder
{
public Guid ID { get; set; }
//other fields
public virtual ICollection<sofie_dfill> DfillsOnThisOrder { get; set; }
}
public-class-dfill//yay-legacy
{
公共int id{get;set;}
//其他领域
public Guid?PurchaseOrderID{get;set;}
公共虚拟采购订单采购订单{get;set;}
}
公共类购买订单
{
公共Guid ID{get;set;}
//其他领域
公共虚拟ICollection DfillsOnThisOrder{get;set;}
}
我有一个静态类试图更新PurchaseOrderID
private static void MakeApiCallsForStore(int ShipToStoreID, List<dfill> dfills)
{
do
{
var ThisOrderID = Guid.NewGuid();
List<dfill> AllDfillsForThisOrder = db.//grab all dfills with the same order_no
var OrderLog = new PurchaseOrder();
OrderLog.ID = ThisOrderID;
OrderLog.BillToStoreID = LogisticsStoreID;
OrderLog.ShipToStoreID = ShipToStoreID;
OrderLog.EstimatedArrivalDate = DateTime.Now;
db.PurchaseOrderLogs.Add(OrderLog);
foreach (var dfill in AllDfillsForThisOrder)
{
dfill.PurchaseOrderID = ThisOrderID; //field looking to update
db.ProductsOrdered.Attach(dfill);
db.Entry(dfill).State = System.Data.Entity.EntityState.Modified;
}
} while ([condition]);
db.SaveChanges();
}
private static void MakeApiCallsForStore(int-ShipToStoreID,List-dfills)
{
做
{
var ThisOrderID=Guid.NewGuid();
列出所有DFILLSFORTHISORDER=db//获取具有相同顺序的所有DFILL\u编号
var OrderLog=new PurchaseOrder();
OrderLog.ID=此orderid;
OrderLog.BillToStoreID=logisticstoreid;
OrderLog.ShipToStoreID=ShipToStoreID;
OrderLog.EstimatedArrivalDate=DateTime.Now;
db.PurchaseOrderLogs.Add(OrderLog);
foreach(按顺序排列的所有DFills中的var dfill)
{
dfill.PurchaseOrderID=ThisOrderID;//正在查找更新的字段
db.ProductsOrdered.Attach(dfill);
db.Entry(dfill.State=System.Data.Entity.EntityState.Modified;
}
}而([条件]);
db.SaveChanges();
}
我尝试了多种解决方案,包括将单个字段标记为已修改。添加OrderLog工作正常。任何帮助都将不胜感激 您是否尝试将dfills添加到订单PurchaseOrder的dfills This Order的集合中?您可能会避免使用foreach
private static void MakeApiCallsForStore(int ShipToStoreID, List<dfill> dfills)
{
do
{
var ThisOrderID = Guid.NewGuid();
List<dfill> AllDfillsForThisOrder = db.//grab all dfills with the same order_no
var OrderLog = new PurchaseOrder();
OrderLog.ID = ThisOrderID;
OrderLog.BillToStoreID = LogisticsStoreID;
OrderLog.ShipToStoreID = ShipToStoreID;
OrderLog.EstimatedArrivalDate = DateTime.Now;
OrderLog.DfillsOnThisOrder = new List<dfill>();
OrderLog.DfillsOnThisOrder.AddRange(AllDfillsForThisOrder);
db.PurchaseOrderLogs.Add(OrderLog);
} while ([condition]);
db.SaveChanges();
}
private static void MakeApiCallsForStore(int-ShipToStoreID,List-dfills)
{
做
{
var ThisOrderID=Guid.NewGuid();
列出所有DFILLSFORTHISORDER=db//获取具有相同顺序的所有DFILL\u编号
var OrderLog=new PurchaseOrder();
OrderLog.ID=此orderid;
OrderLog.BillToStoreID=logisticstoreid;
OrderLog.ShipToStoreID=ShipToStoreID;
OrderLog.EstimatedArrivalDate=DateTime.Now;
OrderLog.DfillsOnThisOrder=新列表();
OrderLog.DfillsOnThisOrder.AddRange(所有Dfillsforthisorder);
db.PurchaseOrderLogs.Add(OrderLog);
}而([条件]);
db.SaveChanges();
}
不确定这是否能具体解决您的问题,但它在实体框架的对象图中显式地设置了关系,因为dfills是相关集合的一部分。由于在设置dfills上外键的关系之前,您没有在上下文中保存采购订单,EF可能会被您当前所采用的方法绊倒。我看不到从采购订单到dfill的关系,尽管有一个从dfill到PurchaseOrder的订单 无论如何,您能否尝试将订单日志分配给dfill.PurchaseOrder
foreach (var dfill in AllDfillsForThisOrder)
{
dfill.PurchaseOrder = OrderLog;
}
这也会起作用-我认为在将新实体(PurchaseOrder)提交到数据库之前,仅通过id设置外键可能会导致问题非常感谢,这让我重新思考了整个过程。我一下子想做的太多了,把所有的部分分开,现在一切都好了:)很乐意帮忙!我很高兴你明白了