【发布时间】:2013-07-20 22:35:35
【问题描述】:
MVC 新手,请原谅这个问题。
我创建了两个模型,Observation 和 StaffMember。一名工作人员进行了一次观察,我根据观察记录记录了 StaffMember 的 ID (GUID)。显示结果时,我希望显示 StaffMember.FullName 而不是 StaffMember.StaffMemberId。
我已经通过使用以下模型实现了这一点:
public class Observation
{
public Guid ObservationId { get; set; }
public string Observer { get; set; }
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime ObservationDate { get; set; }
public Guid StaffMemberId { get; set; }
public int? ObservationGrade { get; set; }
public virtual IEnumerable<StaffMember> StaffMembers { get; set; }
public string StaffMemberName
{
get
{
var db = new ObservationTrackerContext();
var staffMember = db.StaffMembers.FirstOrDefault(s => s.StaffMemberId == StaffMemberId);
return staffMember != null ? staffMember.FullName : "Missing entry or error";
}
}
}
我有点担心我将模型的定义与数据库交互混淆了。这是对 MVC 模式的正确使用还是我应该以不同的方式这样做?
提前感谢任何 cmets 或建议。
【问题讨论】:
-
控制器与数据库交互无关。在 MVC 模式中,它们是“模型”的一部分。也就是说,模型通常不仅仅是数据结构/实体类——通常有一个“数据访问”或“业务逻辑”层来执行数据操作,而控制器只是选择要运行的业务逻辑操作。跨度>
-
也就是说,
StaffMemberName属性是不确定的 - 它涉及在已经检索到Observation实体之后运行数据库访问代码。如果没有别的,这是低效的。通常,您应该尝试让控制器获取数据结构,您只需导航到已加载的所需数据,例如使用Include()
标签: asp.net-mvc model-view-controller