Я использую структуру CSVHelper для передачи данных в Salesforce через Salesforce Bulk API. Приложение представляет собой простое консольное приложение C #, использующее Entity Framework. В настоящее время я работаю только с объектом Account
, но буду добавлять другие таблицы / объекты, поэтому я хочу сделать код максимально многоразовым.
Одна из моих проблем заключается в том, что в исходной таблице есть поля, которые мне нужно игнорировать с помощью атрибута CSVHelper [Ignore]. Это поле Key
игнорируется до тех пор, пока я напрямую помещаю атрибут в автоматически созданное свойство класса Entity следующим образом:
public partial class Account
{
[CsvHelper.Configuration.Attributes.Ignore]
public long Key { get; set; }
// ...
}
Но это не рекомендуется, поскольку этот файл будет регенерирован, когда я добавляю в программу другие таблицы / объекты через Entity Designer.
Итак, первое решение, которое я попробовал, заключалось в том, чтобы просто создать еще один частичный класс с другим именем файла, но с той же сигнатурой и свойством класса:
public partial class Account
{
[CsvHelper.Configuration.Attributes.Ignore]
public long Key { get; set; }
}
Однако это не будет компилироваться, поскольку вы не можете использовать одно и то же свойство в отдельном частичном файле для определения атрибута свойства:
Поэтому я провел небольшое исследование и нашел несколько вариантов, позволяющих избежать размещения атрибута непосредственно в автоматически сгенерированном коде сущности.
Способ 1:
[MetadataType(typeof(Account.MetaData))]
public partial class Account
{
internal class MetaData
{
[CsvHelper.Configuration.Attributes.Ignore]
long Key { get; set; }
}
}
Во время компиляции атрибут [Internal]
не регистрируется, и код не игнорирует поле Key
.
Способ 2:
public interface IEntityMetadata
{
[CsvHelper.Configuration.Attributes.Ignore]
long Key { get; set; }
}
[MetadataType(typeof(IEntityMetadata))]
public partial class Account : IEntityMetadata
{
}
Опять же, код компилируется, но атрибут [Internal]
не регистрируется, и код не игнорирует поле Key
.
Способ 3:
[MetadataType(typeof(AccountAttributes))]
public partial class Account
{ }
public class AccountAttributes
{
[CsvHelper.Configuration.Attributes.Ignore]
public long Key { get; set; }
}
Как и в предыдущих двух методах, код компилируется, но атрибут [Internal]
не регистрируется, и код не игнорирует поле Key
.
Только когда атрибут [Ignore]
применяется непосредственно к автоматически сгенерированному свойству класса Entity Account
, код игнорирует поле Key
.
Мои исследования показывают, что любой из 3 методов, которые я использовал, должен был достичь моей цели. Что мне может не хватать, что мешает этим методам работать?
Спасибо.