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

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

Спасибо.

0 ответов

Другие вопросы по тегам