Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# 在实体框架中将新行添加到DBContext将覆盖最后一个条目_C#_Entity Framework - Fatal编程技术网

C# 在实体框架中将新行添加到DBContext将覆盖最后一个条目

C# 在实体框架中将新行添加到DBContext将覆盖最后一个条目,c#,entity-framework,C#,Entity Framework,问题: 每次我添加一条新记录时,它都会覆盖最后一条记录,因此在循环之后,表中始终保留1条记录 List<Accounting_InvoiceCheck> liIC = new List<Accounting_InvoiceCheck>(); foreach (Accounting_Invoice invoice in liInvoices.OrderBy(x => x.EntityID).ThenBy(x => x.VendorID)) { Accou

问题:
每次我添加一条新记录时,它都会覆盖最后一条记录,因此在循环之后,表中始终保留1条记录

List<Accounting_InvoiceCheck> liIC = new List<Accounting_InvoiceCheck>();
foreach (Accounting_Invoice invoice in liInvoices.OrderBy(x => x.EntityID).ThenBy(x => x.VendorID))
{
    Accounting_InvoiceCheck ic = new Accounting_InvoiceCheck();
    ic = invoiceMaster.Check;
    ctxAcct.Accounting_InvoiceCheck.add(ic);
    //ctxAcct.Entry(ic).State = EntityState.Added
}
ctxAcct.SaveChanges()

您的SaveChanges()在哪里?
Accounting\u InvoiceCheck ic=new Accounting\u InvoiceCheck();ic=发票主控。检查
Can
invoiceMaster。检查
返回相同的对象?抱歉@fatgant,它就在那里,我刚刚忘记添加它。Check是从MVC中的视图传递的对象。因此,在视图上,用户填写一些字段,invoiceMaster。Check是视图中包含这些字段的变量。请尝试交换条目…状态行,以便在将发票状态设置为“修改”之前将ic状态设置为“添加”。@danludwig它不起作用。我确实知道,如果不在该订单中,发票更新信息将丢失。就像上下文无法记住它的状态一样。也就是说,我刚刚发现这是可行的。你知道为什么这是有效的,而我的方法却不行吗?无论如何要缩短它<代码>ctxAcct.Accounting\u InvoiceChecks.Add(新会计\u InvoiceCheck(){InvoiceID=ic.InvoiceID,AcctPeriod=ic.AcctPeriod,BankID=ic.BankID,CheckDate=ic.CheckDate,CheckNo=ic.CheckNo,CKAmt=ic.CKAmt,Description=ic.Description,TransAmt=ic.TransAmt,VendorID=ic.VendorID})
List<Accounting_InvoiceCheck> liIC = new List<Accounting_InvoiceCheck>();
foreach (Accounting_Invoice invoice in liInvoices.OrderBy(x => x.EntityID).ThenBy(x => x.VendorID))
{
    Accounting_InvoiceCheck ic = new Accounting_InvoiceCheck();
    ic = invoiceMaster.Check;


    ic.InvoiceID = invoice.ID;

    var sumAmt = ctx.Accounting_InvoiceChecks.Where(x => x.InvoiceID == invoice.ID).GroupBy(x => x.InvoiceID).Select(x => new { TransAmt = x.Sum(s => s.CKAmt) });
    decimal amt = 0;
    if (sumAmt.ToList().Count > 0)
    {
        amt = sumAmt.FirstOrDefault().TransAmt;
    }
    amt += invoice.AmtPaying;

    ctx.Entry(invoice).Entity.AmtPaying = ic.TransAmt - amt;
    ctx.Entry(invoice).State = EntityState.Modified;
    ctx.Entry(ic).State = EntityState.Added;
    //ctx.Accounting_InvoiceChecks.Add(ic);
    //liIC.Add(ic);
}
ctx.Accounting_InvoiceChecks.AddRange(liIC);
ctx.SaveChanges();
ctxAcct.Accounting_InvoiceChecks.Add(new Accounting_InvoiceCheck()
{
    InvoiceID = ic.InvoiceID,
    AcctPeriod = ic.AcctPeriod,
    BankID = ic.BankID,
    CheckDate = ic.CheckDate,
    CheckNo = ic.CheckNo,
    CKAmt = ic.CKAmt,
    Description = ic.Description,
    TransAmt = ic.TransAmt,
    VendorID = ic.VendorID
});