linq2db插入?错误 ColumnMapping
linq2db Insert ? error ColumnMapping
我尝试使用 linq2db 插入数据?但出现错误
Table class
[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"
}
]
错误
The given ColumnMapping does not match up with any column in
the source or destination.
我检查了所有类型并复制粘贴了列名,但问题仍然存在。 ID 列中可能有问题吗?如何正确传递给bulkCopy结构
要尝试传递 ID 列,您可以尝试 BulkCopyOptions:
db.BulkCopy(new BulkCopyOptions { KeepIdentity = true }, result);
因此,在这种情况下,所有列表的插入将保留您之前提供的标识。
此外,在列类型中尝试使用布尔值而不是 "bit"。
PS:此选项在 SQL 提供商中有效。如果您使用的是 PostgreSQL,您需要将 linq2db 更新到版本 2.0.0.0 beta4,或一些预发布版本。
虽然 SQL 默认情况下服务器列名称不区分大小写,但批量复制区分大小写。您需要检查数据库中的列名称,如果它们与 C# 属性的大小写不同 - 将数据库名称放入列属性中。
我尝试使用 linq2db 插入数据?但出现错误
Table class
[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"
}
]
错误
The given ColumnMapping does not match up with any column in the source or destination.
我检查了所有类型并复制粘贴了列名,但问题仍然存在。 ID 列中可能有问题吗?如何正确传递给bulkCopy结构
要尝试传递 ID 列,您可以尝试 BulkCopyOptions:
db.BulkCopy(new BulkCopyOptions { KeepIdentity = true }, result);
因此,在这种情况下,所有列表的插入将保留您之前提供的标识。
此外,在列类型中尝试使用布尔值而不是 "bit"。
PS:此选项在 SQL 提供商中有效。如果您使用的是 PostgreSQL,您需要将 linq2db 更新到版本 2.0.0.0 beta4,或一些预发布版本。
虽然 SQL 默认情况下服务器列名称不区分大小写,但批量复制区分大小写。您需要检查数据库中的列名称,如果它们与 C# 属性的大小写不同 - 将数据库名称放入列属性中。