2011-12-21 62 views
1

可以爲任何人的EDMX設計器類如何創建一個視圖模型和地圖的EDMX設計器類

想我的EDMX文件被命名爲School.edmx創建一個視圖模型提供了一個鏈接,它有school.Designer.cs類。 在設計器類我有如下因素實體對象

[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 .....

請可以任何人都會建議如何爲包含除User_Password和User_Email_ID以外的所有以上列的上述實體對象創建視圖模型,因爲我需要將它用作我的view.I的強類型視圖模型。我還需要在具有選定列的同一viewmodel中使用另一個表....

我已經經歷了很多d ocuments..i已經花了1天半這個 任何人可以幫助.. 我知道這個問題的一再要求,但我cannt找到正確的方式做它... 感謝

回答

1

編輯:修改回答提問。從其他實體

約額外的屬性評論這可能有助於

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;} 
} 

視圖模型是你的實體的一個扁平版本。

+0

謝謝,但我如何包括其他實體對象與選定的列在同一viewmodel..suppose我有項目表,其中我必須包括projectname和projectcreated日期列,我如何映射它... – bhargav 2011-12-21 11:11:17

+0

我想我會有多個項目,所以我應該使用列表項目名稱。?並可以給你一個簡短的例子,使用映射我的情況 – bhargav 2011-12-21 11:19:08

+0

var model = new User {User_Pk = userViewModel.Pk ....} var model2 = new Project {Name = userViewModel.Name ...} – heads5150 2011-12-21 11:23:19

1

你必須自己編寫你的viewmodel類。 只需創建一個類似MyWebApp.Models.User的類,它包含您需要的屬性並將edmx類映射到您的控制器中。

對於映射我推薦使用automapper這使得映射生活更容易。

編輯 這是你如何使用automapper: 說你的DAL類被稱爲用戶,你的視圖模型類叫做UserViewModel。

你必須告訴automapper一旦哪個類要映射:

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

Automapper甚至可以映射:

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

然後,你可以用一條從一個類型的對象映射到另一個對象集合。所以如果你的模型有一個像IEnumerable<Projects>這樣的屬性,它也會映射這個。

+0

請告訴我如何使用automapper – bhargav 2011-12-21 11:14:38

+0

@bhargav:我已經更新了我的回答 – Jan 2011-12-21 11:44:24

+0

,但是它如何映射項目實體對象...? – bhargav 2011-12-21 11:57:41

0

通過右鍵單擊edmx設計界面並選擇添加代碼生成項目> EF 5.x DBContext Generator> Add,我可以獲得VS的大部分工作。

然後,您應該在與edmx文件相同的文件夾中看到一個[xxx] .tt文件。如果你擴展這個文件,你會看到每個實體的POCO類。

我根據需要將實體複製到我的viewmodel並刪除我不需要的實體。

一旦我對我的viewmodel感到滿意,我將刪除[xx]。tt文件,右鍵單擊edmx設計界面上的屬性>屬性>代碼生成策略>默認。

我還強烈建議使用Automapper,因爲Jan在他的回答中提到過。

相關問題