Атрибут не регистрируется в частичном классе / интерфейсе сущности

Я использую структуру 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 методов, которые я использовал, должен был достичь моей цели. Что мне может не хватать, что мешает этим методам работать?

Спасибо.


person Swisher Sweet    schedule 18.10.2017    source источник