Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在MVC 3中填充视图模型_Asp.net Mvc 3_Linq_Entity Framework - Fatal编程技术网

Asp.net mvc 3 在MVC 3中填充视图模型

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>(); 这一切都很好,直到我想填充一个列表。这是我的解决方案,添加到视图模型中,但感觉很

我正在重构一个MVC3Web应用程序,不直接将数据模型传递给控制器,而是使用视图模型(参见inspiration)

目前,在填充模型列表时,我们在控制器中执行以下操作:

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我很想知道为什么这件事被否决了。盲目地否决某些东西对任何人都没有帮助,站出来给出一个合理的理由。