【问题标题】:Override partial class field in ASP MVC model覆盖 ASP MVC 模型中的部分类字段
【发布时间】:2013-05-15 15:58:11
【问题描述】:

在我的 ASP MVC 项目中,每当我向项目中添加新表时,都会创建两个模型。一个在文本模板转换工具包下(文件扩展名为/.tt),另一个在一般Models 文件夹中(这个似乎希望在文件末尾默认使用“1”)。

每当对数据库进行更改时,似乎.tt 文件下的所有模型都会根据该表上数据库中当前存在的字段进行刷新。这之外的文件是一般的Models 文件夹,但是保持原样。因此,我们将所有模型验证方法都放在了这些.cs 文件中(文件名末尾带有“1”)。

但是,在一种情况下,我需要从模型中删除 .tt 文件下的一个字段,以便在另一个 .cs 文件中执行验证。这是我执行的验证:

    private string agentId;

    //here, AgentId overrrides the field in the BankListAgentId.cs file, 
    //which MUST be commented out.
    [DisplayName("Agent ID")]
    public string AgentId
    {
        get { return agentId; }
        set { agentId = this.scrubAgentId(value); }
    }

有没有办法在此.cs 文件中指定此处的AgentId 字段(名称末尾带有“1”的文件)覆盖AgentId field in the.csfile found under the.tt`文件?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 validation asp.net-mvc-4 model


    【解决方案1】:

    据我所知,这是不可能的。但是你可以做的技巧很少。

    1. 将您的财产名称更改为例如。 InternalAgentId 并在 EDMX 中更改该字段以保护甚至私有。然后在您的代码中引用 InternalAgentId:

      public string AgentId
      {
          get { return this.InternalAgentId; }
          set { this.InternalAgentId = this.ScrubAgentId(value); }
      }
      

      如果您在 linq 中需要该属性,可以查看 Microsoft Linq Translation

    2. 另一种方法是更改​​ T4 以生成部分方法并在生成的属性中调用它。我认为实体框架模板之一已经这样做了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 2012-05-10
      相关资源
      最近更新 更多