Атрибут не регистрируется в частичном классе / интерфейсе сущности
Я использую инфраструктуру 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]
атрибут применяется непосредственно к автоматически сгенерированному объекту Account
свойство класса будет игнорировать код Key
поле.
Мои исследования показывают, что любой из 3 методов, которые я использовал, должен был достичь моей цели. Чего мне не хватает, что мешает работе этих методов?
Спасибо.