1

最近、データアノテーションを新しい部分クラスに配置して、データベースからのedmx更新で永続化する方法について学びました。
データベースファーストのアプローチとデータベーススキーマの変更データベース
からのモデルの更新(データベースファースト)

私のモデルの1つには、firstNameとlastNameの2つの属性があります。以下に示すフルネームの仮想プロパティを作成しました。

public virtual string fullName { get {return firstName + " " + lastName; } }

fullNameプロパティは、edmxで生成された.ttモデルクラスにある場合は機能しますが、アノテーションを保持する「バディ」部分クラスに入れると、機能しません(つまり、アプリの他の部分で次のように認識されません)。私のクラスの属性)。

edmxへのデータベース更新によって上書きされない上記のfullNameプロパティのような集約仮想プロパティを取得するにはどうすればよいですか?

4

1 に答える 1

1

私はそれを考え出した。付随するデータ注釈の部分クラスには、部分クラスのメタデータを設定するために使用するclassMetaDataクラスがあります(つまり、注釈はここにあります)。ただし、aggregate属性は(メタデータクラスではなく)部分クラスに含める必要があります。

したがって、2番目の部分クラスコードは次のようになります。

namespace MyProject.Models
{
[MetadataType(typeof(PersonMetaData))]
public partial class Person
{
    //this is where you put new aggregate properties
    public virtual string fullName { get { return firstName + " " + lastName; } }
}

public class PersonMetaData
{
    //this is where you put data annotations
    [Required]
    public string firstName { get; set; }
    [Required]
    public string lastName { get; set; }
} 

}
于 2012-08-11T20:06:44.700 に答える