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# 使用不同列名的SQL大容量复制映射?_C#_Entity Framework_Sqlbulkcopy - Fatal编程技术网

C# 使用不同列名的SQL大容量复制映射?

C# 使用不同列名的SQL大容量复制映射?,c#,entity-framework,sqlbulkcopy,C#,Entity Framework,Sqlbulkcopy,我们的表中有一些列不是用户友好的名称,所以我们在实际的GUI中更改它们 例如,数据库中的一列被标记为“IntAmt”,但用户没有任何线索,因此在程序中,我们称该列为“利息金额” 问题是,如果我使用如下所示的直接列映射,那么它将出错,因为这些列不匹配。数据库中没有名为“InterestAmount”的列 那么,有没有一种方法可以在带有注释的映射中引用正确的列名呢?我们也在使用实体框架 var connection = DbContext.Database.Connection.Conne

我们的表中有一些列不是用户友好的名称,所以我们在实际的GUI中更改它们

例如,数据库中的一列被标记为“IntAmt”,但用户没有任何线索,因此在程序中,我们称该列为“利息金额”

问题是,如果我使用如下所示的直接列映射,那么它将出错,因为这些列不匹配。数据库中没有名为“InterestAmount”的列

那么,有没有一种方法可以在带有注释的映射中引用正确的列名呢?我们也在使用实体框架

     var connection = DbContext.Database.Connection.ConnectionString;

        using (SqlConnection sqc = new SqlConnection(connection))
        {
            sqc.Open();
            using (SqlBulkCopy bcp = new SqlBulkCopy(sqc))
            {
                bcp.DestinationTableName = strTargetTable;

                sourceData.Columns.Cast<DataColumn>().ToList().ForEach(x =>
                                                                      bcp.ColumnMappings
                 .Add(new SqlBulkCopyColumnMapping(x.ColumnName, x.ColumnName)));
                bcp.BatchSize = 50000;
                bcp.BulkCopyTimeout = 12000;
                bcp.WriteToServer(sourceData);
            }
            sqc.Close();
        }
也就是说,有没有一种方法可以动态地映射这种方式?
我们有很多表,在代码中分别对每个名称进行硬编码映射将花费大量时间

尝试使用
TableMappings.Add()


仅供参考:

在定义SQL BulkCopyColumnMapping类型的db对象add和IEnumerable的类中

public static IEnumerable<SqlBulkCopyColumnMapping> GetObjectNameColumnMappings()
    {
        return new[]
        {
            new SqlBulkCopyColumnMapping(nameof(propertyName), "dbColumnName"),
            new SqlBulkCopyColumnMapping(nameof(propertyName2), "dbColumnName2")
        };
    }

这看起来不错。我已经更新了问题,添加了我刚刚发现我们使用的映射表。有没有一种方法可以使用您的代码动态映射这些列?
public static IEnumerable<SqlBulkCopyColumnMapping> GetObjectNameColumnMappings()
    {
        return new[]
        {
            new SqlBulkCopyColumnMapping(nameof(propertyName), "dbColumnName"),
            new SqlBulkCopyColumnMapping(nameof(propertyName2), "dbColumnName2")
        };
    }
using (SqlBulkCopy bcp = new SqlBulkCopy(sqc))
        {
            bcp.DestinationTableName = strTargetTable;
            bcp.ColumnMappings = classInstance.GetObjectNameColumnMappings();
            bcp.BatchSize = 50000;
            bcp.BulkCopyTimeout = 12000;
            bcp.WriteToServer(sourceData);
        }