Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架扩展:BulkMerge with update语句_C#_Entity Framework_Entity Framework Extensions - Fatal编程技术网

C# 实体框架扩展:BulkMerge with update语句

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

在使用实体框架扩展的BulkMerge时,有没有办法运行update语句? 例如,如果记录存在,则将数据库中的当前值与参数列表中的值相加。如果记录不存在,则只需在数据库中插入参数列表的值

我正在寻找一些可以包含的东西,比如(x=>newanimal{Age=x.Age+parameters.Age})

就SQL而言,它类似于以下合并:

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);
});