使用MetadataTypeAttribute在外部文件中验证属性

时间:2012-08-27 14:05:53

标签: asp.net-mvc-3 entity-framework validation

我让VS使用EF 4.3.1从现有的SQL表创建我的模型。因为数据库表不是最终的并且可能会更改,所以我不想将验证属性直接设置到模型文件中,因为在更新模型时它会被覆盖。

我想使用此处描述的MetadataTypeAttribute方法: Update Model From Database (Database First)

所以我创建了一个包含这个类的外部文件:

using System.ComponentModel.DataAnnotations;

namespace PDB.Models
{
    [MetadataTypeAttribute(typeof(t_scriptingMetadata))]
    public partial class t_scripting
    {
    }

    public class t_scriptingMetadata
    {
        [Required]
        public int platform {get; set;}

        [Required]
        [StringLength(20)]
        public string Projectname {get; set;}
    }
}

不幸的是我在VS中遇到了这些错误:

  • 重复EdmEntityTypeAttribute属性
  • 重复可序列化属性
  • 重复DataContractAttribute属性

由VS生成的我的模型正好具有错误消息提及的这些属性:

[EdmEntityTypeAttribute(NamespaceName="CAWI_STDMGTModel", Name="t_scripting")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class t_scripting : EntityObject
{
    //...
}

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你的t_scriptingMetadata类必须进入t_scripting 不一定

    [MetadataTypeAttribute(typeof(t_scriptingMetadata))] 
public partial class t_scripting 
{ 
  public class t_scriptingMetadata 
  { 
     [Required] 
     public int platform {get; set;} 

     [Required] 
     [StringLength(20)] 
     public string Projectname {get; set;} 
  } 
} 

两个部分类必须具有相同的命名空间。 希望这有帮助。 此致

答案 1 :(得分:0)

我发现了这个问题。我的模型中有一个表,实际上是一个包含另一个表中的字段的视图,该表也在我的模型中。所以错误信息确实是正确的。感谢您的帮助,vfabre!