Asp.net mvc 3 在MVC 3中填充视图模型
我正在重构一个MVC3Web应用程序,不直接将数据模型传递给控制器,而是使用视图模型(参见inspiration) 目前,在填充模型列表时,我们在控制器中执行以下操作:Asp.net mvc 3 在MVC 3中填充视图模型,asp.net-mvc-3,linq,entity-framework,Asp.net Mvc 3,Linq,Entity Framework,我正在重构一个MVC3Web应用程序,不直接将数据模型传递给控制器,而是使用视图模型(参见inspiration) 目前,在填充模型列表时,我们在控制器中执行以下操作: var myQuery = from t in _db.TimeEntries select t; List<TimeEntry> timeEntryList = myQuery.ToList<TimeEntry>(); 这一切都很好,直到我想填充一个列表。这是我的解决方案,添加到视图模型中,但感觉很
var myQuery = from t in _db.TimeEntries
select t;
List<TimeEntry> timeEntryList = myQuery.ToList<TimeEntry>();
这一切都很好,直到我想填充一个列表。这是我的解决方案,添加到视图模型中,但感觉很笨拙
public static List<TimeEntryViewModel> LoadTimeEntryViewModels(string userID)
{
theDB _db = new theDB();
List<int> myQuery = (from t in _db.TimeEntries
select t.ID).ToList<int>();
List<TimeEntryViewModel> timeEntryList = new List<TimeEntryViewModel>();
foreach (int i in myQuery)
{
timeEntryList.Add(new TimeEntryViewModel(i));
}
return timeEntryList;
}
公共静态列表LoadTimeEntryViewModels(字符串用户ID)
{
theDB_db=新的theDB();
List myQuery=(从t到_db.TimeEntries)
选择t.ID).ToList();
List timeEntryList=新列表();
foreach(myQuery中的int i)
{
添加(新的TimeEntryViewModel(i));
}
返回时间列表;
}
有没有更好的方法是我缺少的?您的视图模型没有责任知道如何提取数据并填充自己,它基本上是一个dto,为视图添加了一点额外的元数据(如必需等)。首先,我会让控制器给你的数据库打电话。随后,随着应用程序的增长,您可以将db调用重构到存储库/数据访问层 您还可以通过执行以下操作清理linq查询:
var entries = from t in _db.TimeEntries
select new TimeEntryViewModel { entry = t.entry, time = t.time };
TimeEntry也是db实体吗?如果是,则可以在视图模型中对其进行引用。你也在更新你的数据库,我会使用某种依赖注入来解耦你的代码,这将清理你的代码,并让你能够在单元测试中模拟它,并将为您进行设置,以便以后您可以为依赖项而不是具体项传递接口。您的视图模型不负责了解如何提取数据并填充自身,它基本上是一个dto,为视图提供了一些额外的元数据(如必需等)。首先,我会让控制器给你的数据库打电话。随后,随着应用程序的增长,您可以将db调用重构到存储库/数据访问层 您还可以通过执行以下操作清理linq查询:
var entries = from t in _db.TimeEntries
select new TimeEntryViewModel { entry = t.entry, time = t.time };
TimeEntry也是db实体吗?如果是,则可以在视图模型中对其进行引用。你也在更新你的数据库,我会使用某种依赖注入来解耦你的代码,这将清理你的代码,并让你能够在单元测试中模拟它,并将设置你,以便以后你可以传递依赖性的接口,而不是具体的接口。@AnnomousDownVoter我很想知道这被否决的原因。盲目地否决某些东西对任何人都没有帮助,站出来,给出一个合理的理由。@AnnomousDownVoter我很想知道为什么这件事被否决了。盲目地否决某些东西对任何人都没有帮助,站出来给出一个合理的理由。