我应该如何设计我的ViewModel并使用AutoMapper和EF保存它?

时间:2011-08-01 14:16:06

标签: asp.net-mvc asp.net-mvc-3 automapper

我不太确定如何使用ViewModel所以我需要一些关于以下问题的帮助:

我正在创建一个在线调查。 用户能够创建多项选择题。我用于此目的的域实体如下:

[Question]
int category_id { get; set; } // The category the question belongs to
int type_code { get; set; } // The type of question (I.E Multiple Choice)
string question_wording { get; set; } // The question itself
bool visible { get; set; } // Visiblity
int question_number { get; set; } // The number of the question
string help_text { get; set; } // Help text if the user doesnt understand the question

[Multiple_Choice_Question]
int choice_number { get; set; } // The order in which the MCQ answer possibility is shown
int choice_wording { get; set; } // The MCQ answer possibility
string help_text { get; set; } // help_text if the user doesnt understand the answer possibility

// This is a cross-reference table in my database that maps questions with choice possibilities

[Ref_Multiple_ChoiceAnswer]
int question_id { get; set; }
int mcq_id { get; set; }

在我的视图中,我需要能够同时创建问题和选择可能性(Multiple_Choice_Question)。用户将选择可能性写入文本框,每个文本框由一个新行分隔。

Cat
Dog
Mouse

既然我正在使用两个实体,那么我应该将所有必要的属性放在我的ViewModel中吗?每个答案可能性是我的数据库中的一个新行,并且在视图中它以字符串形式发回(文本框中的文本) - 我该如何解决这个问题?

如何在[HttpPost]上使用AutoMapper将问题中的属性与新的问题对象绑定,并使用Multiple_Choice_Question对象绑定答案。另外,在Ref_Multiple_ChoiceAnswer表中映射两个新实体的最佳方法是什么?

提前致谢

1 个答案:

答案 0 :(得分:0)

您不应该从视图模型绑定道具。它是如此设计。

这使设计更加朝向oop 应通过调用行为更改模型的状态。

E.g。而不是:

question.visible=questionViewModel.visible;

您应该使用:

class QuestionController{
 ActionResult Hide(int question){
   var q=find(question);
   q.Hide();
   return q.As<QuestionViewModel>();

 }
}
class Question{
  void Hide(){
    Visible=false;
  }
}

这就是为什么“绑定属性”没有意义。