我尝试使用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与中的任何列都不匹配 来源或目的地。
我检查了所有类型并制作了列名称的copypaste,但问题仍然存在。 ID列中可能存在问题吗?如何正确地将其传递给bulkCopy结构。
答案 0 :(得分:0)
要尝试传递ID列,您可以尝试BulkCopyOptions:
db.BulkCopy(new BulkCopyOptions { KeepIdentity = true }, result);
因此,在这种情况下,插入所有列表将保留您之前提供的身份。
此外,不要使用列类型中的“位”,而是尝试使用boolean。
PS:此选项在SQL Provider中有效。如果您使用的是PostgreSQL,则需要将linq2db更新为版本2.0.0.0 beta4或某些预发行版。
答案 1 :(得分:0)
虽然默认情况下SQL Server列名不区分大小写,但大容量复制区分大小写。您需要检查数据库中的列名称,以及它们是否与C#属性区分大小写-将数据库名称放入列属性中。