0

我让 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
{
    //...
}

我究竟做错了什么?

4

2 回答 2

0

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

于 2012-08-28T12:48:27.353 回答
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;} 
  } 
} 

并且两个部分类必须具有相同的命名空间。希望这有帮助。问候

于 2012-08-27T14:12:33.910 回答