C# 实体框架扩展:BulkMerge with update语句
在使用实体框架扩展的BulkMerge时,有没有办法运行update语句? 例如,如果记录存在,则将数据库中的当前值与参数列表中的值相加。如果记录不存在,则只需在数据库中插入参数列表的值 我正在寻找一些可以包含的东西,比如(x=>newanimal{Age=x.Age+parameters.Age}) 就SQL而言,它类似于以下合并:C# 实体框架扩展:BulkMerge with update语句,c#,entity-framework,entity-framework-extensions,C#,Entity Framework,Entity Framework Extensions,在使用实体框架扩展的BulkMerge时,有没有办法运行update语句? 例如,如果记录存在,则将数据库中的当前值与参数列表中的值相加。如果记录不存在,则只需在数据库中插入参数列表的值 我正在寻找一些可以包含的东西,比如(x=>newanimal{Age=x.Age+parameters.Age}) 就SQL而言,它类似于以下合并: WHEN MATCHED THEN UPDATE SET TARGET.ColumNumber = TARGET.C
WHEN MATCHED THEN
UPDATE SET
TARGET.ColumNumber = TARGET.ColumNumber + SOURCE.ColumNumber
WHEN NOT MATCHED BY TARGET THEN
INSERT...
是的,可以添加硬编码公式 以下是使用后配置的示例: 以下是映射所有列的示例:
context.BulkMerge(列表,选项=>{
options.ColumnMappings.Add(新的Z.BulkOperations.ColumnMapping(x=>x.CustomerID,true));
options.ColumnMappings.Add(新的Z.BulkOperations.ColumnMapping(x=>x.Name));
var columnMapping=newz.BulkOperations.columnMapping(x=>x.Description);
columnMapping.FormulaUpdate=“DestinationTable.Name+”;“+StaginTable.Description”;
options.ColumnMappings.Add(columnMapping);
});
两个示例都连接了两个字段,但正如您所看到的,您可以使用任何类型的公式。使用DestinationTable
和StagingTable
别名非常重要
注定的
DestinationTable是更新数据的表。因此,示例中的TARGET
表
分期表
StagingTable是从中获取数据以进行更新的表。因此,示例中的
SOURCE
表可以尝试此操作。您是否知道合并不适用于Oracle?使用SQL Server时效果很好,但使用oracle时,它只执行插入操作,而不执行更新。我会在github拿到合适的票。谢谢@menta,不,我们不知道。你是第一个报告此事的人,我们将随你所开的那期杂志一起看。
context.BulkMerge(list, options => {
options.PostConfiguration = bulk => {
bulk.ColumnMappings.Single(x => x.SourceName == "Description").FormulaUpdate = "DestinationTable.Name + ';' + StagingTable.Description";
};
});
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);
});