覆盖ASP MVC模型中的部分类字段

时间:2013-05-15 15:58:11

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

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

enter image description here

每当对数据库进行更改时,似乎根据该表上数据库中当前存在的字段刷新.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。cs file found under the。tt`文件?

1 个答案:

答案 0 :(得分:0)

据我所知,无法做到。但是你可以做很少的技巧。

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

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

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

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