簡體   English   中英

將數據從一個SQL表行插入到字段匹配的另一行-Entity Framework

[英]Insert data from one sql table row to another where field matches - Entity Framework

我在SQL數據庫中有兩個表。 它們都有五個字段: ID (PK), NumberInvoiceDateInvoiceNumberInvoiceAmount 我正在嘗試使用Entity Framework插入InvoiceDate,InvoiceNumber和InvoiceAmount,其中字段號從一個表匹配到另一個表。

表一的上下文是:

var tc = new TemporaryCsvUpload();

表二:

var pt = new PermanentTestTable();

首先,我將值從CSV插入表1中,現在嘗試在Number字段匹配的表2中插入值。

                var entity = new CsvDbEntities1();

            foreach (var item in model)
            {
                var tc = new TemporaryCsvUpload();
                tc.Number = item.Number;
                tc.CreditInvoiceAmount = item.CreditInvoiceAmount;
                tc.CreditInvoiceDate = item.CreditInvoiceDate;
                tc.CreditInvoiceNumber = item.CreditInvoiceNumber;
                entity.TemporaryCsvUploads.Add(tc);

                entity.SaveChanges();
            }

我是EF的新手,我們將不勝感激。 謝謝!

抱歉,如果我不完全了解,但這里基於以下代碼:

foreach (var item in model)
        {
            var tc = new TemporaryCsvUpload();
            tc.Number = item.Number;
            tc.CreditInvoiceAmount = item.CreditInvoiceAmount;
            tc.CreditInvoiceDate = item.CreditInvoiceDate;
            tc.CreditInvoiceNumber = item.CreditInvoiceNumber;
            entity.TemporaryCsvUploads.Add(tc);

            entity.SaveChanges();
        }

保存第一個表后,現在查詢第二個表,以獲取與以下記錄相同的記錄:

var table2entity = entity.PermanentTestTable.Where(x => x.Number == tc.Number).Select(x => x).First();

這將查詢第二個表並獲取具有相同編號的任何實體

因此,您的最終代碼可能如下所示:

var entity = new CsvDbEntities1();

        foreach (var item in model)
        {
            var tc = new TemporaryCsvUpload();
            tc.Number = item.Number;
            tc.CreditInvoiceAmount = item.CreditInvoiceAmount;
            tc.CreditInvoiceDate = item.CreditInvoiceDate;
            tc.CreditInvoiceNumber = item.CreditInvoiceNumber;
            entity.TemporaryCsvUploads.Add(tc);

            entity.SaveChanges();

            var table2entity = entity.PermanentTestTable.ToList();
            table2entity = table2entity.Where(x => x.Number == tc.Number).Select(x => x).First();
            table2entity.CreditInvoiceAmount = item.CreditInvoiceAmount;
            //More values inserted here
            entity.SaveChanges()
        }

我最終不得不嵌套一個foreach循環,以使用Number字段遍歷每一行。 我敢肯定有更好的方法可以做到這一點,但我很高興它正在起作用:

var entity = new CsvDbEntities1();

            foreach (var item in model)
            {
                var tc = new TemporaryCsvUpload
                {
                    PoNumber = item.Number,
                    CreditInvoiceAmount = item.CreditInvoiceAmount,
                    CreditInvoiceDate = item.CreditInvoiceDate,
                    CreditInvoiceNumber = item.CreditInvoiceNumber
                };
                entity.TemporaryCsvUploads.Add(tc);

                var ptt = entity.PermanentTestTables.ToList().Where(x => x.Number == tc.Number);

                foreach (var row in ptt)
                {
                    row.CreditInvoiceDate = tc.CreditInvoiceDate;
                    row.CreditInvoiceNumber = tc.CreditInvoiceNumber;
                    row.CreditInvoiceAmount = tc.CreditInvoiceAmount;
                }
                entity.SaveChanges();
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM