【问题标题】:linq2db Insert ? error ColumnMappinglinq2db 插入?错误列映射
【发布时间】:2018-04-13 09:51:14
【问题描述】:

我尝试使用 linq2db 插入数据?但得到错误

表格类

[Table(Schema="inf", Name="InformMessageLog")]
public partial class InformMessageLog
{
    [Identity             ] public int      ID             { get; set; }// int 
    [Column,   NotNull    ] public DateTime Date           { get; set; } // datetime
    [Column,   NotNull    ] public int      StudentID      { get; set; }// int 
    [Column,      Nullable] public string   ContactName    { get; set; } // nvarchar(max)
    [Column,      Nullable] public string   ContactPhone   { get; set; } // nvarchar(max)
    [Column,      Nullable] public string   ContactMail    { get; set; }// nvarchar(max) 
    [Column,   NotNull    ] public string   EventPoint     { get; set; } // nvarchar(50)
    [Column,   NotNull    ] public string   Template       { get; set; } // nvarchar(max)
    [Column,   NotNull    ] public string   Link           { get; set; } // nvarchar(100)
    [Column,   NotNull    ] public string   Status         { get; set; } // nvarchar(100)
    [Column,      Nullable] public bool?    TechnicalError { get; set; } // bit
    [Column,      Nullable] public string   CampaingId     { get; set; } // nvarchar(max)
}

我的代码

List<InformMessageLog> result = new List<InformMessageLog>();
result = ....; //form list result
try
    {
        using (var db = new IntegrationSqlDbDB())
        {
            db.BulkCopy(result);
        }
        return req.CreateResponse(HttpStatusCode.OK, result);
    }
    catch (Exception e)
    {
        loger.LogError("Failed to set log from db " + e.Message);
        return req.CreateResponse(HttpStatusCode.BadRequest, "Failed to set log from db  - " + e.Message);
    }

结果数据

[
  {
    "ID": 1,
    "Date": "2018-04-13T00:00:00+00:00",
    "StudentID": 76769,
    "ContactName": "XXXXXXX XXXXXXX",
    "ContactPhone": "-",
    "ContactMail": "XXX@mail.ru",
    "EventPoint": "loyality",
    "Template": "1806123",
    "Link": "unisender",
    "Status": "-",
    "TechnicalError": false,
    "CampaingId": "1594676730"
  }
]

错误

给定的 ColumnMapping 与中的任何列都不匹配 来源或目的地。

我检查了所有类型并复制了列名,但问题仍然存在。 ID列可能有问题吗?如何正确地将其传递给 bulkCopy 结构。

【问题讨论】:

    标签: c# insert linq2db


    【解决方案1】:

    要尝试传递 ID 列,可以尝试 BulkCopyOptions:

    db.BulkCopy(new BulkCopyOptions { KeepIdentity = true }, result);
    

    因此,在这种情况下,插入所有列表将保留您之前提供的身份。

    另外,在列类型中不要使用“位”,而是尝试使用布尔值。

    PS:此选项在 SQL Provider 中有效。如果您使用的是 PostgreSQL,则需要将 linq2db 更新到 2.0.0.0 beta4 或一些预发布版本。

    【讨论】:

      【解决方案2】:

      虽然默认情况下 SQL Server 列名不区分大小写,但大容量复制区分大小写。您需要检查数据库中的列名,如果它们与 C# 属性的大小写不同 - 将 db 名称放入列属性中。

      【讨论】:

        猜你喜欢
        • 2017-04-11
        • 1970-01-01
        • 2014-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-03
        • 1970-01-01
        相关资源
        最近更新 更多