我使用只有1层(MVC)的MVC 3构建了一个简单的调查工具。我现在后悔了。我的所有数据库访问和映射都在控制器和其他一些映射类中处理。
我想切换到使用三层:
演示文稿(MVC)
业务逻辑
数据/持久性(EF)
我正在使用Entity Framework来处理数据库的所有内容。实体框架创建了自己的域类。 MVC使用的模型与EF创建的模型之间的映射应该在哪里?
如果映射在业务层中,是否需要MVC项目中的Models文件夹?
调查问题包括问题本身,行和列。 Theese是我使用的模型:
public class Question {
public int Question_ID { get; set; }
public Boolean Condition_Fullfilled;
[Required(ErrorMessage = "Dette felt er påkrævet")]
public String Question_Wording { get; set; }
public String Question_Type { get; set; }
[Required(ErrorMessage = "Dette felt er påkrævet")]
public String Question_Order { get; set; }
public String Left_scale { get; set; }
public String Right_scale { get; set; }
public int Scale_Length { get; set; }
public String Left_Scale_HelpText { get; set; }
public String Right_Scale_HelpText { get; set; }
public Boolean Visible { get; set; }
public Boolean IsAnswered { get; set; }
public String Question_HelpText { get; set; }
public int Category_ID { get; set; }
}
public class MatrixColumns
{
public int Column_ID { get; set; }
public int Column_Number { get; set; }
public String Column_Description { get; set; }
public Boolean IsAnswer { get; set; }
public int? Procent { get; set; }
public bool Delete { get; set; }
public bool Visible { get; set; }
public int? Numbers { get; set; }
public String Help_Text { get; set; }
}
public class MatrixRows
{
public bool Delete { get; set; }
public bool Visible { get; set; }
public int Row_Id { get; set; }
public String Row_Number { get; set; }
public String Row_Description { get; set; }
public String Special_Row_CSS { get; set; }
public String Help_Text { get; set; }
// Dette er summen af procenterne af alle kolonner i rækken
public int RowSum { get; set; }
}
theese模型的所有数据都在Controller中检索,基于QuestionID,并映射到如下所示的ViewModel:
public class ShowMatrixQuestionViewModel : Question
{
public Dictionary<MatrixRows, List<MatrixColumns>> columnrow { get; set; }
public List<MatrixColumns> columns { get; set; }
public List<MatrixRows> rows { get; set; }
public ShowMatrixQuestionViewModel()
{
columns = new List<MatrixColumns>();
rows = new List<MatrixRows>();
columnrow = new Dictionary<MatrixRows, List<MatrixColumns>>();
}
}
因此,当我想从我的控制器向视图发送ShowMatrixQuestionViewModel
时,我应该采取什么路线?
这是我的建议:
- &GT; Controller调用名为
的业务层中的方法public ShowMatrixViewModel GetQuestion(int QuestionID) {}
- &GT; GetQuestion在数据层中调用以下方法:
public Question GetQuestion(int QuestionId) {}
public MatrixRows GetRows(int QuestionId) {}
public MatrixColumns GetColumns(int id) {}
- &GT;实体框架返回“纯”对象,我想将其映射到我在上面发布的对象
- &GT; GetQuestion调用方法将EF模型映射到我自己的模型
- &GT; Last GetQuestion调用一个映射问题,行和列的方法:
ShowMatrixQuestionViewModel model = MapShowMatrixQuestionViewModel(Question, MatrixRows, MatrixColumns)
return model;
这是对的吗?
提前致谢
答案 0 :(得分:0)
回答问题的第一部分:
“MVC使用的模型与EF创建的模型之间的映射应该在哪里?”
答案是模型MVC使用 由EF创建的模型。 ASP.NET MVC项目中的EF工具是Linq to SQL Classes或ADO.NET Entity Framework Model。您应该在项目的Models文件夹中创建它们,它们提供您的数据/持久性(EF)。