Entity Framework 扩展:带有更新语句的 BulkMerge
Entity Framework Extensions: BulkMerge with update statement
在使用 Entity Framework 扩展的 BulkMerge 时,有什么方法可以 运行 更新语句吗?
例如,如果记录存在,则将数据库中的当前值与参数列表中的值相加。如果记录不存在,则只需将参数列表的值插入数据库即可。
我正在寻找要包含的内容,例如 (x => new Animal {Age = x.Age + parameters.Age});
就 SQL 而言,它会像这样合并:
WHEN MATCHED THEN
UPDATE SET
TARGET.ColumNumber = TARGET.ColumNumber + SOURCE.ColumNumber
WHEN NOT MATCHED BY TARGET THEN
INSERT...
是的,可以添加硬编码公式。
这是一个使用 PostConfiguration 的例子:https://dotnetfiddle.net/s8QF4t
context.BulkMerge(list, options => {
options.PostConfiguration = bulk => {
bulk.ColumnMappings.Single(x => x.SourceName == "Description").FormulaUpdate = "DestinationTable.Name + ';' + StagingTable.Description";
};
});
这是一个映射所有列的示例:https://dotnetfiddle.net/enOEQF
context.BulkMerge(list, options => {
options.ColumnMappings.Add(new Z.BulkOperations.ColumnMapping<Customer>(x => x.CustomerID, true));
options.ColumnMappings.Add(new Z.BulkOperations.ColumnMapping<Customer>(x => x.Name));
var columnMapping = new Z.BulkOperations.ColumnMapping<Customer>(x => x.Description);
columnMapping.FormulaUpdate = "DestinationTable.Name + ';' + StagingTable.Description";
options.ColumnMappings.Add(columnMapping);
});
这两个示例都连接了 2 个字段,但如您所见,您可以使用任何类型的公式。使用 DestinationTable
和 StagingTable
别名很重要
目的地表
DestinationTable 是将在其上更新数据的 table。因此,您的示例中的 TARGET
table。
临时表
StagingTable 是 table 从中获取数据以进行更新的表。因此,您的示例中的 SOURCE
table。
在使用 Entity Framework 扩展的 BulkMerge 时,有什么方法可以 运行 更新语句吗? 例如,如果记录存在,则将数据库中的当前值与参数列表中的值相加。如果记录不存在,则只需将参数列表的值插入数据库即可。
我正在寻找要包含的内容,例如 (x => new Animal {Age = x.Age + parameters.Age});
就 SQL 而言,它会像这样合并:
WHEN MATCHED THEN
UPDATE SET
TARGET.ColumNumber = TARGET.ColumNumber + SOURCE.ColumNumber
WHEN NOT MATCHED BY TARGET THEN
INSERT...
是的,可以添加硬编码公式。
这是一个使用 PostConfiguration 的例子:https://dotnetfiddle.net/s8QF4t
context.BulkMerge(list, options => {
options.PostConfiguration = bulk => {
bulk.ColumnMappings.Single(x => x.SourceName == "Description").FormulaUpdate = "DestinationTable.Name + ';' + StagingTable.Description";
};
});
这是一个映射所有列的示例:https://dotnetfiddle.net/enOEQF
context.BulkMerge(list, options => {
options.ColumnMappings.Add(new Z.BulkOperations.ColumnMapping<Customer>(x => x.CustomerID, true));
options.ColumnMappings.Add(new Z.BulkOperations.ColumnMapping<Customer>(x => x.Name));
var columnMapping = new Z.BulkOperations.ColumnMapping<Customer>(x => x.Description);
columnMapping.FormulaUpdate = "DestinationTable.Name + ';' + StagingTable.Description";
options.ColumnMappings.Add(columnMapping);
});
这两个示例都连接了 2 个字段,但如您所见,您可以使用任何类型的公式。使用 DestinationTable
和 StagingTable
别名很重要
目的地表
DestinationTable 是将在其上更新数据的 table。因此,您的示例中的 TARGET
table。
临时表
StagingTable 是 table 从中获取数据以进行更新的表。因此,您的示例中的 SOURCE
table。