Добавить данные главного подчиненного устройства одновременноC#

Место общения программистов C#
Ответить
Anonymous
 Добавить данные главного подчиненного устройства одновременно

Сообщение Anonymous »

В SQL Server 2022 INSERT INTO ... OUTPUT.Inserted.* VALUES ... может получить вставленные элементы. Затем оператор может вставлять данные в одну или две таблицы (с одинаковой структурой таблицы).
Можно ли вставлять данные в несколько таблиц с разной структурой таблиц?
CREATE TABLE tb_Master
(
Id INT IDENTITY(1,1) PRIMARY KEY,
[Master] VARCHAR(50)
)

CREATE TABLE tb_Slave
(
Id INT IDENTITY(1,1) PRIMARY KEY,
ParentId INT NOT NULL, --tb_Master.Id
[Slave] VARCHAR(50)
)

Модели сущностей C#:
internal class MasterMdl
{
public int Id { get; set; }

public string Master { get; set; }

public IEnumerable Slaves { get; set; }
}

internal class SlaveMdl
{
public int Id { get; set; }
public int ParentId { get; set; }

public string Slave { get; set; }
}

В C# создайте данные для вставки:
var list = new List();

for (int i = 0; i < 10; i++)
{
var m = new MasterMdl()
{
Master = $"Master {i}",
};

SlaveMdl[] slaves = new SlaveMdl[5];

for (int j = 0; j < 5; j++)
{
slaves[j] = new SlaveMdl()
{
Slave = $"Slave {j}"
};
}

m.Slaves = slaves;

list.Add(m);
}

Обновление: мой пример кода C#
using var masterCmd = await _dbConnectionContext.CreateCommand(mastSQL, masterParameterItems, token, false);

var reader = await masterCmd.ExecuteReaderAsync(token);

var allSlaves = new List();

var handler = statement.Context.GetSlaveHandler;
var parentId = statement.Context.ParentId;

await reader.ReadAsync(token);

foreach (var data in userData)
{
var slaves = handler.Invoke(data);
var id = reader[0];

foreach (var slave in slaves)
{
(parentId as IPropertyValue).SetValue(slave, id);
}

allSlaves.AddRange(slaves);

await reader.ReadAsync(token);
}

reader.Close();

using var slaveCmd = await _dbConnectionContext.CreateCommand(slaveSQL, slaveParameterItems, token, false);
var ret = await slaveCmd.ExecuteNonQueryAsync(token);

await _dbConnectionContext.Commit(token);


Подробнее здесь: https://stackoverflow.com/questions/792 ... -same-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»