【发布时间】:2012-01-11 00:11:57
【问题描述】:
不久前,当我第一次使用 MVC 时,我陷入了胖控制器的陷阱。我的第一个应用程序使用 EF4 来制作我需要的所有模型。我只是把我所有的逻辑放到我的控制器动作中。虽然它有效,但绝对不是最佳实践方式。为了以正确的方式做到这一点,我开始尝试基于我的 EF 对象构建我的模型,以努力遵循瘦控制器的概念。
我在尝试找到填充模型的最佳方法时遇到了障碍。有没有办法运行 LINQ 查询并让它填充您的模型,而无需遍历属性以设置为另一个类?
类似这样的:
// from EF model built from database
public class MyEFObject
{
public int ID {get; set;}
public string Name {get; set;}
public string Title {get; set;}
}
public class MyObjectModel : MyEFObject
{
private Entities _data = new Entities();
public MyObjectModel(int? id)
{
if(id.HasValue) // get an existing record
{
this = _data.MyEFObjects.Where(m => m.ID.Equals(id)).Single();
// or populate right out of the query
_data.MyEFObjects.Where(m => m.ID.Equals(id))
.Select(o => new {
this.ID = o.ID,
this.Name = o.Name,
this.Title = o.Title
});
}
else
{
// set defaults for a new MyObjectModel
}
}
public void Save()
{
// takes the current object and saves changes
}
}
我知道您可以向 EF 实体对象添加一个函数,但我喜欢在一次调用中将创建或更新选项全部绑定(保存方法)。如果我必须从本质上重新创建我已经从我的 EF 对象中拥有的东西,我看不出这点会弄乱模型。如果我只是在一个接受填充对象的类上有一个方法,那么我的视图的可用模型的概念就被否定了。
【问题讨论】:
标签: c# asp.net-mvc linq entity-framework-4