0

EF 4.3.1を使用して、VSに既存のSQLテーブルからモデルを作成させます。DBテーブルは最終的なものではなく、変更される可能性があるため、モデルを更新すると上書きされるため、検証属性をモデルファイルに直接設定したくありません。

ここで説明するMetadataTypeAttributeアプローチを使用したい: データベースからモデルを更新する(データベースファースト)

そこで、このクラスを含む外部ファイルを作成しました。

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属性が重複しています
  • 重複するSerializable属性
  • 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 に答える