在db中搜索我的Web应用程序

时间:2014-04-08 09:57:25

标签: sql-server asp.net-mvc-3 angularjs

目前我正在使用mvc3 asp.net开展基于网络的项目。我在这里使用codefirst技术。而angularjs作为脚本框架。 我需要帮助的场景如下,

我有一个名为employee

的模型
public class Employee 
{
    public int EmployeeId { get; set; }
    public string Name { get; set; }
}

每位员工都可以拥有偏好/偏好。 偏好的模型类如下所示

public class Preference 
{
    public int PreferenceId { get; set; } 
    public string Preference { get; set; }
    public int EmployeeId { get; set; }
    public virtual Employee Employee { get; set; }
}

现在当我生成员工列表时,我想在没有偏好的人旁边显示删除按钮。为此,我必须看到数据库中的每个员工是否有任何偏好。但它让我的程序运行缓慢。

public ActionResult GetEmployeesList()
{
    var employees = new List<object>();
    foreach (var employee in EmployeeRepository.GetAll())
    {
        employees.Add(new{EmployeeId=employee.EmployeeId,Name=employee.Name,
        Deletable=IsEmployeeDeletable(employee.EmployeeId)});
    }
    return Json(employees, JsonRequestBehavior.AllowGet);
 }

我正在为每位员工调用以下功能。所以对于每个员工都有一个搜索偏好表,整个列表来得太慢了

private bool IsEmployeeDeletable(int EmployeeId)
{
    return !PreferenceRepository.GetConditional
              (p => p.EmployeeId==EmployeeId).ToList().Any();
}

有没有办法让我不必这样做,我可以提高传播这个清单的效率和时间?

1 个答案:

答案 0 :(得分:0)

我会向员工添加首选项属性:

public class Employee 
{
    public int EmployeeId { get; set; }
    public string Name { get; set; }
    public virtual List<Preference> Preferences {get;set;}
}

控制器方法只需对数据库进行一次调用即可获得将首选项链接到其中的员工列表。

 public ActionResult GetEmployeesList()
{
    var employees = EmployeeRepository.GetAll();
    return Json(employees, JsonRequestBehavior.AllowGet);
}

然后在你的HTML中你可以从Json对象访问Preferences属性,所以为了只显示那些没有偏好的按钮,我会在按钮上设置一个条件,如下所示:

<input type="button" ng-click="deleteEmployee()" ng-show="!employee.Preferences.Length">Delete</input>