Я использую Entity Framework 6.0.0.0 с замечательным инструментом Джоша Клоуз 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 Entity Framework требует, чтобы первичный ключ имел значение по умолчанию. В любом случае, возможно, есть способ игнорировать столбец в CsvHelper при обработке данных?
Я получаю следующие ошибки:
the conversion cannot be performed
"Row: '1' (1 based) Type: 'P' Field Index: '99' (0 based)"
В CSV-файле нет значения для этого поля, что, как я полагаю, является проблемой, поскольку это int
, а не int?
, но если это первичный ключ, я не могу сделать его допускающим значение NULL, верно?
Любая помощь здесь была бы замечательной ...
var pr = csv.GetRecord<P>();
- person gotmike   schedule 10.05.2017