繁体   English   中英

如何复制与他的数据链接在其他表(相关)中的行并将它们作为新记录插入 - Linq C#

[英]How to copy a row with his data linked in other tables (related ) and insert them as a new records - Linq C#

如何复制与他的数据链接在其他表(相关)中的一行并将它们作为新记录插入到所有表中,使用:

ASP.NET MVC/C#/Linq(方法语法)/实体框架代码优先

例如 :

我有这些表 =>

在此处输入图片说明

我想复制“Customer”表的最后一行,并用新的ID将其添加到数据库的新行中,同时复制“Order”表中所有相关的订单,并用“CustoemerID”复制它们使用新 ID 的新“客户”,同时复制表“OrderLine”中的所有订单行并使用新的“OrderID”复制它们

怎么做 ?

是否有执行此操作的简短代码?

在此处输入图片说明

蓝色是数据库中的最后一行,绿色是我正在寻找的代码的结果,客户及其相关数据的副本

主键:CustomerID & OrderID & OrderLineID = AUTO INCREMENT 字段

看看这是否对您有帮助:

INSERT INTO customer (ID, Name, Address1, Address2, Address3) 
    SELECT 
        3, Name, Address1, Address2, Address3 
    FROM
        customer 
    WHERE
       ID = 2;

INSERT INTO Order (CustomerId, TotalAmount) 
    SELECT CustomerId, TotalAmount 
    FROM Order 
    WHERE CustomerID = 3;

INSERT INTO OrderLine (OrderId, ProductId, Quantity) 
    SELECT ol.OrderId, ol.ProductId, ol.Quantity 
    FROM OrderLine ol 
    WHERE ol.OrderId IN (SELECT o2.OrderId 
                         FROM Order o2 
                         WHERE o2.CustomerID = 3);

对于这个问题,我可以想到 2 个解决方案

  1. 使用Sql查询

  2. 首先使用 EF 代码,您可以在 Customer 类中创建一个克隆方法。

 CREATE TABLE #Customer ( CustomerId INT Identity(1, 1) ,Name NVARCHAR(100) ,Address1 NVARCHAR(100) ,Address2 NVARCHAR(100) ,Address3 NVARCHAR(100) ) INSERT INTO #Customer VALUES ( 'N2' ,'A11' ,'A22' ,'A33' ) INSERT INTO #Customer SELECT Name ,Address1 ,Address2 ,Address3 FROM #Customer GROUP BY Name ,Address1 ,Address2 ,Address3 HAVING Count(*) BETWEEN 0 AND 1

使用克隆方法

   public class Customer
    {
        public int CustomerId { get; set; }
        public string Name { get; set; }
        public string Address1 { get; set; }
        public string Address2 { get; set; }
        public string Address3 { get; set; }


        public Customer Clone()
        {
            // where the reference is not detached
            var employee1 = new Customer
            {
                Name = Name,
                Address1 = Address1,
                Address2 = Address2,
                Address3 = Address3
            };

            // with reference detached
            var serialisedData = JsonConvert.SerializeObject(this);
            var employee2 = JsonConvert.DeserializeObject<Employee>(serialisedData);

            //  return employee1 or employee2;
            return employee1;

        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM