【发布时间】:2012-02-17 15:46:59
【问题描述】:
我有 3 个类用于规则、请求、执行和批准者。
我想将这三个表组合成一个视图模型,以便我可以在一个视图中获取 Requestid、描述、批准者和执行状态。 这是我的第一次粗略尝试,似乎可行,但我觉得这是创建 ViewModel 的非常不正确的方法。请提出更好的方法。
public class Rules
{
[Required]
public virtual int RulesId { get; set; }
[Required]
public virtual string RulesDescription { get; set; }
[Required]
public virtual int ApprovalLevels { get; set; } //if 0 then auto approved.
[Required]
public virtual string Requestor { get; set; }
}
public class Requests
{
[Required]
public virtual int RequestsId { get; set; }
[Required]
public virtual DateTime RequestTime { get; set; }
[Required]
public virtual bool isCompleted { get; set; }
[Required]
public virtual string UserName { get; set; }
[Required]
public virtual int RulesId { get; set; }
public virtual string Description { get; set; }
}
public class ExecutionStatus
{
[Required]
public virtual int ExecutionStatusId { get; set; }
[Required]
public virtual int RequestId { get; set; }
[Required]
public virtual int CurrentApproverLevel { get; set; }
[Required]
public virtual string ApprovalStatus { get; set; }
}
public class Approvals
{
[Required]
public virtual int ApprovalsId { get; set; }
[Required]
public virtual int RulesId { get; set; }
[Required]
public virtual int ApproverLevel { get; set; }
[Required]
public virtual string ApproverName { get; set; }
}
public class RequestExecutionViewModel
{
private RequestsContext db = new RequestsContext();
public RequestExecutionViewModel(string username)
{
this.Request = db.Requests.Where(a => a.UserName.Equals(username)).First();
//aa = db.Approvals.Where(a => a.RulesId.Equals(Request.RulesId));
this.Approvals = (List<Approvals>) db.Approvals.Where(a => a.RulesId.Equals(Request.RulesId)).ToList();
this.ExecutionStatus = (List<ExecutionStatus>)db.ExecutionStatus.Where(a => a.RequestId.Equals(Request.RequestsId)).ToList();
}
[Required]
public virtual int RequestExecutionViewModelId { get; set; }
public Requests Request {get;set;}
public List<Approvals> Approvals { get; set; }
public List<ExecutionStatus> ExecutionStatus { get; set; }
}
编辑:在模型中进行数据库查询对我来说似乎是错误的。应该有更好的做事方式。
【问题讨论】:
-
你觉得有什么不妥之处? (不以任何方式评论它,但如果我们知道你不喜欢它并想要改变它,给你小费可能会更容易)
-
构图相当不错,但是,您不应该在视图模型中包含
private RequestsContext db = new RequestsContext();和RequestExecutionViewModel()。另外,您可能想使用IList<>而不是List<> -
谢谢吉姆。这也是我的担心。作为一个菜鸟,我想我错过了一些东西。
标签: c# asp.net-mvc model-view-controller viewmodel