Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架6无法更新数据库中的列_C#_Entity Framework - Fatal编程技术网

C# 实体框架6无法更新数据库中的列

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

我正在尝试将子实体(首先是SofiePurchaseOrder代码)附加到父实体(首先是现有DB表中的sofie_dfill代码)。我将实体标记为已修改,但在保存更改并检查数据库后,它没有更改

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的关系,尽管有一个从dfillPurchaseOrder的订单

无论如何,您能否尝试将订单日志分配给dfill.PurchaseOrder

foreach (var dfill in AllDfillsForThisOrder)
{
    dfill.PurchaseOrder = OrderLog;
}

这也会起作用-我认为在将新实体(PurchaseOrder)提交到数据库之前,仅通过id设置外键可能会导致问题非常感谢,这让我重新思考了整个过程。我一下子想做的太多了,把所有的部分分开,现在一切都好了:)很乐意帮忙!我很高兴你明白了