У меня есть 3 класса для правил, запросов, исполнений и утверждений.Использование ViewModel для извлечения данных из нескольких таблиц?
Я хочу объединить эти три таблицы в viewModel, чтобы я мог получить 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()' , включенные в viewmodel. Кроме того, вы можете использовать 'IList <>', а не 'List <>' –
спасибо jim. Это тоже мое беспокойство. Как ничто, я думаю, что чего-то не хватает. – drieddust