属性未在部分实体类/接口上注册

时间:2017-10-18 16:28:11

标签: c# entity-framework csvhelper

我正在使用CSVHelper框架通过Salesforce Bulk API将数据推送到Salesforce。该应用程序是一个使用Entity Framework的简单C#控制台应用程序。我目前只使用Account对象,但会添加其他表/对象,所以我想让代码尽可能重用。

我面临的一个挑战是源表中有哪些字段需要使用CSVHelper [Ignore]属性忽略。只要我直接将属性放在自动生成的Entity类属性上,就会忽略此Key字段:

public partial class Account
{
    [CsvHelper.Configuration.Attributes.Ignore]
    public long Key { get; set; }
    // ...
}

但是,这不是首选,因为当我通过实体设计器将其他表/对象添加到程序时会重新生成此文件。

所以我尝试的第一个解决方案是简单地创建另一个具有不同文件名但具有相同类签名和属性的分部类:

public partial class Account
{
  [CsvHelper.Configuration.Attributes.Ignore]
  public long Key { get; set; }
}

但是,自you cannot use the same property in separate partial file to define a property attribute以来这不会编译:

enter image description here

所以我做了一些研究,并找到了几个选项来避免将属性直接放在自动生成的实体代码上。

方法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 个答案:

没有答案