【发布时间】:2017-05-09 23:46:36
【问题描述】:
我正在使用 Entity Framework 6.0.0.0 和 Josh Close 的出色 CsvHelper 工具。
在我添加 EF 之前一切都很好,因为我主要处理类,没有数据库,因此没有主键!
所以现在我已经确认我的主键已在数据库中正确设置为自动递增标识。
我的班级看起来像这样:
[Table("tbl_P")]
public class P // PData File
{
// Column P1
public string StrTrId { get; set; }
// NOTE COLUMNS P2-P99 GO HERE
// Column P99
public string StrCo { get; set; }
// Column P100
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int pk_PropertyId { get; set; }
}
请注意,我将主键放在最后,希望这将有助于映射工作,而不必以某种方式移动列。
我正在像这样阅读上面的课程:
var csv = new CsvReader(reader);
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.WillThrowOnMissingField = false;
csv.Configuration.TrimFields = true;
while (csv.Read())
{
var pr = csv.GetRecord<P>();
}
所以我不确定问题是否与我将主键放在类的末尾有关,或者它是否是 b/c 实体框架要求主键具有默认值。无论哪种方式,当我处理数据时,也许有一种方法可以忽略 CsvHelper 中的列?
我得到的错误是:
the conversion cannot be performed
"Row: '1' (1 based) Type: 'P' Field Index: '99' (0 based)"
该字段的 CSV 文件中没有值,我想这是问题所在,因为它是 int 而不是 int?,但如果它是主键,我不能将其设为可为空,对吗?
这里的任何帮助都会很棒...
【问题讨论】:
-
@PaulAbbott -- 我的错......错字。应该是
var pr = csv.GetRecord<P>();
标签: c# sql-server entity-framework csvhelper