2011-12-21 4 views
1

ためにマップする誰もがEDMXデザイナークラスのためのviewmodelを作成するためのリンクを提供することができます方法のviewmodelを作成し、EDMXデザイナークラス

私EDMXファイルがSchool.edmxという名前で、それがschool.Designer.csを持っていると仮定クラス。デザイナーのクラスで 私は上記のエンティティオブジェクト(ユーザー表)で、次の列がありfolowingエンティティオブジェクト

[EdmEntityTypeAttribute(NamespaceName="teamworkModel", Name="User")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class User : EntityObject 
{ 

    #region Primitive Properties 

    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Int32 User_Pk 
    { 
     get 
     { 
      return _User_Pk; 
     } 
     set 
     { 
      if (_User_Pk != value) 
      { 
       OnUser_PkChanging(value); 
       ReportPropertyChanging("User_Pk"); 
       _User_Pk = StructuralObject.SetValidValue(value); 
       ReportPropertyChanged("User_Pk"); 
       OnUser_PkChanged(); 
      } 
     } 
    } 
    private global::System.Int32 _User_Pk; 
    partial void OnUser_PkChanging(global::System.Int32 value); 
    partial void OnUser_PkChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    [Required(ErrorMessage="Please enter your name")] 
    [StringLength(20,ErrorMessage="Name cannot exceed 20 characters")] 
    [RegularExpression(@"^([a-zA-Z0-9 \.\&\'\-]+)$", ErrorMessage = "Invalid name")] 
    public global::System.String User_Name 
    { 
     get 
     { 
      return _User_Name; 
     } 
     set 
     { 
      OnUser_NameChanging(value); 
      ReportPropertyChanging("User_Name"); 
      _User_Name = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("User_Name"); 
      OnUser_NameChanged(); 
     } 
    } 
    private global::System.String _User_Name; 
    partial void OnUser_NameChanging(global::System.String value); 
    partial void OnUser_NameChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    [Email(ErrorMessage="Invalid email address")] 
    [Required(ErrorMessage="Please enter email address")] 
    public global::System.String User_Mail_Id 
    { 
     get 
     { 
      return _User_Mail_Id; 
     } 
     set 
     { 
      OnUser_Mail_IdChanging(value); 
      ReportPropertyChanging("User_Mail_Id"); 
      _User_Mail_Id = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("User_Mail_Id"); 
      OnUser_Mail_IdChanged(); 
     } 
    } 
    private global::System.String _User_Mail_Id; 
    partial void OnUser_Mail_IdChanging(global::System.String value); 
    partial void OnUser_Mail_IdChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    [Required(ErrorMessage="Please enter password")] 
    [StringLength(20,ErrorMessage="Password cannot exceed 20 characters")] 
    [RegularExpression(@"^([a-zA-Z0-9 \.\&\'\-]+)$", ErrorMessage = "Invalid password")] 
    public global::System.String User_Password 
    { 
     get 
     { 
      return _User_Password; 
     } 
     set 
     { 
      OnUser_PasswordChanging(value); 
      ReportPropertyChanging("User_Password"); 
      _User_Password = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("User_Password"); 
      OnUser_PasswordChanged(); 
     } 
    } 
    private global::System.String _User_Password; 
    partial void OnUser_PasswordChanging(global::System.String value); 
    partial void OnUser_PasswordChanged(); 


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.DateTime User_Creation_Date 
    { 
     get 
     { 
      return _User_Creation_Date; 
     } 
     set 
     { 
      OnUser_Creation_DateChanging(value); 
      ReportPropertyChanging("User_Creation_Date"); 
      _User_Creation_Date = StructuralObject.SetValidValue(value); 
      ReportPropertyChanged("User_Creation_Date"); 
      OnUser_Creation_DateChanged(); 
     } 
    } 
    private global::System.DateTime _User_Creation_Date; 
    partial void OnUser_Creation_DateChanging(global::System.DateTime value); 
    partial void OnUser_Creation_DateChanged(); 

を持ってUser_PK、User_Nameの、USER_PASSWORD、User_Email_ID .....

してくださいすることができます誰も私のビューのために強く型付けされたviewmodelとしてそれを使用する必要があるため、User_PasswordとUser_Email_IDを除くすべての上記の列を含む上記のエンティティオブジェクトのビューモデルを作成する方法を提案します。同じビューモデルで別のテーブルを使用する必要があります....

私はたくさんのd ocuments..iはすでに誰もが..私はこの質問を繰り返し尋ねている知っている を助けることができるこの のために1日半を過ごしたが、私は

答えて

1

編集...それを行うには正しい方法を見つける おかげcannt:解答するように修正します

public class UserViewModel 
{ 
public int Pk{get;private set;} 
public string Name{get;set;} 
public DateTime CreationDate{get;set;} 
public string ProjectName{get;set;} 
public DateTime ProjectCreated{get;set;} 
} 

のViewModelはあなたのエンティティの平坦化されたバージョンがある。これは役立つかもしれない他のエンティティ

から余分な性質についてのコメント。

+0

ありがとうございますが、同じviewmodel..supposeに選択した列を持つ他のエンティティオブジェクトを含めるにはどうすればいいですか?projectnameとprojectcreatedの日付列を含める必要があるプロジェクトテーブルがあります... – bhargav

+0

私は思っています複数のプロジェクトがあるので、私はprojectnameのListを使うべきです。私の状況のた​​めのマッピングを使用しての短い例を与えることができます – bhargav

+0

varモデル=新しいユーザー{User_Pk = userViewModel.Pk ....} var model2 =新しいプロジェクト{Name = userViewModel.Name ...} – heads5150

1

自分でviewmodelクラスを作成する必要があります。 必要なプロパティを含むMyWebApp.Models.Userという名前のクラスを作成し、コントローラのedmxクラスにマップします。

マッピングについては、automapperを使用することをお勧めします。これにより、マッピングの作業が簡単になります。

EDIT これはautomapperを使用する方法である:あなたのDALのクラスはユーザーと呼ばれ、あなたのviewmodelクラスがUserViewModelと呼ばれていると言う 。

User user = dal.GetUser(); 
UserViewModel model = AutoMapper.Mapper.Map<User, UserViewModel>(user); 

Automapperことさえマップ:

AutoMapper.Mapper.CreateMap<User, UserViewModel>(); 

は、その後、あなたは、単一の行に別の種類のオブジェクトをマッピングすることができます。

はあなたがマップしたいクラスたらautomapper伝える必要がありますオブジェクトのコレクション。したがって、モデルにIEnumerable<Projects>のようなプロパティがある場合は、これもマップされます。

+0

私はどのようにオートマトンを使用するのですか – bhargav

+0

@bhargav:私は答えを – Jan

+0

更新しましたが、どのようにプロジェクトのエンティティオブジェクトをマップしますか? – bhargav

0

私は、edmxデザイン面を右クリックして、コード生成アイテムの追加> EF 5.x DBContext Generator>追加を選択することで、ほとんどの作業をVSに任せます。

[xxx] .ttファイルは、edmxファイルと同じフォルダにあります。このファイルを展開すると、エンティティごとにPOCOクラスが表示されます。

必要に応じてエンティティを私のビューモデルにコピーし、必要のないエンティティを削除します。

私のビューモデルに満足したら、[xx]を削除します。ttファイルで、edmxデザインサーフェスのプロパティを右クリック>プロパティ>コード生成戦略>デフォルト。

私はAutomapperを彼の答えに記載されているように強くお勧めしたいと思います。

関連する問題