将数据从一个sql表行插入到另一个字段匹配的位置 - 实体框架

时间:2015-07-24 17:25:36

标签: c# sql asp.net-mvc entity-framework

我在SQL数据库中有两个表。它们都有五个字段: ID (PK),数字 InvoiceDate InvoiceNumber InvoiceAmount 即可。我试图使用Entity Framework插入InvoiceDate,InvoiceNumber和InvoiceAmount,其中字段Number从一个表匹配到另一个表。

表一的上下文是:

var tc = new TemporaryCsvUpload();

表二:

var pt = new PermanentTestTable();

首先,我从CSV中将值插入到表1中,现在我正在尝试插入表格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的新手,我们将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

很抱歉,如果我不完全理解,但这里基于此代码:

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()
        }

答案 1 :(得分:0)

我最终必须嵌套一个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();
            }