【问题标题】:Entity Framework DB First add a custom property for all POCO classes generatedEntity Framework DB 首先为生成的所有 POCO 类添加自定义属性
【发布时间】:2016-05-24 13:36:39
【问题描述】:

我在我的所有 POCO 类中都使用 EF 6.1.3 我有一个接受 HTML 值的公共字段。我想为所有这些 POCO 类添加一个公共属性,它将去除 HTML 并保留干净的字符串。

当前 POCO 类

public partial class Category
{
    public string Name {get; set;}
    public string Details {get; set;}
}

我希望生成的内容

public partial class Category
{
  public string Name {get; set;}
    public string Details {get; set;}
    public string CleanDetails
    { 
        get{ return StripHtml(this.Details ); } 
    } 
}

我不应该在每次更新实体模型时丢失这个自定义属性

public string CleanDetails
    { 
        get{ return StripHtml(this.Details ); } 
    }

尝试在 Mode.Context.tt 上进行以下更改,但没有用

 public string EntityClassOpening(EntityType entity)
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            "{0} {1}partial class {2}{3}",
            Accessibility.ForType(entity),
            _code.SpaceAfter(_code.AbstractOption(entity)),
            _code.Escape(entity),
            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType) ?? "BaseEntity" ));
    }

我发现有一种方法可以为所有需要此自定义属性的人创建部分类。但我需要在大约 40 个类中使用它,并且将来可能会有更多类,我希望它更像是自动化方法,然后手动创建 40 个部分类。

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    可以implement inheritance in EF6。您可以使用所有共享方法和属性创建一个基类,然后如果您使所有实体类型都继承自它(请参阅链接),您将拥有您所追求的行为。唯一的问题是,如果您从模型中删除了一个表,然后从数据库中重新添加它,您将不得不再次从基类继承它。

    【讨论】:

      【解决方案2】:

      我在我的数据库项目中为我自己生成了另一个文件夹,并在另一个部分类中添加了这些属性。将 CSharp 文件添加到该文件夹​​并插入与您的类(类别)相同的文件名并更改命名空间

      public partial class Category
      {
          public string CleanDetails
         { 
              get{ return StripHtml(this.Details ); } 
         } 
      }
      

      【讨论】:

      • 这正是我不想做的。我在大约 40 个 POCO 类中需要这个自定义属性,而且这个数量可能会增加。所以我想看看是否有更好的自动化方式。
      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多