Как скопировать строку со своими данными, связанными в другие таблицы (связанные), и вставить их как новые записи - Linq C # - PullRequest
0 голосов
/ 24 декабря 2018

Как скопировать строку со своими данными, связанными в другие таблицы (связанные), и вставить их как новые записи во все таблицы, используя:

ASP.NET MVC / C # / Linq (синтаксис метода) /Entity Framework Code-First

Например:

У меня есть эти таблицы =>

enter image description here

Я хочу скопировать последнюю строку таблицы «Клиент» и добавить ее в новую строку базы данных с новым идентификатором, а также скопировать все заказы, относящиеся к таблице «Заказ», и продублировать их с помощью«CustoemerID» нового «Клиента» с новыми идентификаторами и одновременно скопировать все строки заказов в таблицу «OrderLine» и дублировать их с новым «OrderID»

Как это сделать?

Есть ли краткий код для этого?

enter image description here

Синий цвет - последняя строка в базе данных, а зеленыйцвет является результатом кода, который я ищу, дубликат копии клиента и его связанных данных

Первичные ключи: CustomerID & OrderID & OrderLineID = AUTO INCREMENT Поле

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Я могу придумать 2 решения для этого вопроса

  1. Используя запрос Sql

  2. Сначала используя EF-код, вы можете создать метод клонирования внутрикласс вашего клиента.

  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;

        }
    }
0 голосов
/ 24 декабря 2018

Посмотрите, поможет ли это вам:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...