![](/img/trans.png)
[英]How to match data from two data tables have single row using LINQ or C# other way
[英]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 个解决方案
使用Sql查询
首先使用 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.