如何复制一行并将其数据链接到其他表(相关)中,并将其作为新记录插入-Linq C#

如何复制一行并将其数据链接到其他表(相关)中,并将其作为新记录插入-Linq C#,c#,asp.net-mvc,entity-framework,linq,ef-code-first,C#,Asp.net Mvc,Entity Framework,Linq,Ef Code First,如何复制数据链接到其他表(相关)中的行,并将其作为新记录插入所有表中,包括: ASP.NET MVC/C#/Linq(方法语法)/实体框架代码优先 例如: 我有这些桌子=> 我想复制“Customer”表的最后一行,并使用新ID将其添加到数据库的新行中,同时复制表“Order”中相关的所有订单,并使用新ID的新“Customer”的“CustomerId”复制它们,同时复制表“OrderLine”中的所有订单行并用新的“OrderID”复制它们 怎么做 是否有一个简短的代码来执行此操作 蓝色

如何复制数据链接到其他表(相关)中的行,并将其作为新记录插入所有表中,包括:

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

例如:

我有这些桌子=>

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

怎么做

是否有一个简短的代码来执行此操作

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

主键:CustomerID&OrderID&OrderLineID=自动递增字段

查看这是否有助于您:

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);
   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;

        }
    }

我可以想出两个解决这个问题的办法

  • 使用Sql查询

  • 首先使用EF代码,您可以在Customer类中创建克隆方法

  • 使用克隆方法

       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;
    
            }
        }
    
    公共类客户
    {
    public int CustomerId{get;set;}
    公共字符串名称{get;set;}
    公共字符串地址1{get;set;}
    公共字符串地址2{get;set;}
    公共字符串地址3{get;set;}
    公共客户克隆()
    {
    //其中引用未分离
    var employee1=新客户
    {
    Name=Name,
    地址1=地址1,
    地址2=地址2,
    地址3=地址3
    };
    //参考分离
    var serialisedData=JsonConvert.SerializeObject(this);
    var employee2=JsonConvert.DeserializeObject(serialisedData);
    //返回员工1或员工2;
    返回员工1;
    }
    }
    
    对于SQL Server-这肯定会失败-因为
    Order
    是一个保留的T-SQL关键字,如果您使用它作为表名,您必须将其放在方括号中-
    [Order]
    …在LINQ中,我想您没有很好地理解我的问题,请重新阅读Hanks Marc,是的,我同意。忘了将reserve关键字括在方括号内。Mazilia,我没有注意到您正在查找LINQ查询,但将上述逻辑转换为LINQ并不困难?如果这有助于您: