成为MVC和实体框架的新手我在执行复杂数据查询时遇到了很多问题。我正在使用Database First方法,我需要了解从单独的数据库中提取相关数据的最佳方法。我已连接到数据库并创建了edmx文件以及现有数据库中的模型。我将简化问题示例:如果我有一个包含员工信息的表:
Employee_Information(EmployeeID, FullName, Address, Phone)
然后我有第二个(在另一个数据库中)
Employee_Achievements(EmployeeID, Achievement, DateAchieved)
如何将这两者结合在一起以在视图中提取员工的信息(姓名,地址等)?我最初的想法是做一个连接,然后将其传递给视图:
var employee = from emp in db.EmployeeAchievements
join empInfo in emp_db.EmployeeInformation
emp.EmployeeID == empInfo.EmployeeID
我遇到的问题是我已经在使用ViewModel,并将多个模型传递给视图。我需要能够在视图中同时为几个员工绑定信息:
@for (int i = 0; i < model.EmployeeAchievements.Count; i++)
{
<tr valign="top">
<td>
<div class="editor-field">
@Html.EditorFor(model => model.EmployeeAchievements[i].EmployeeID)
@Html.ValidationMessageFor(model => model.EmployeeAchievements[i].EmployeeID)
</div>
</td>
// Display employee name next
可能使用ViewBag?或者有没有办法可以跨数据库关联外键?请记住,这是数据库优先,因此生成了edmx和模型文件。我还没有找到任何关于我在这里尝试做什么的好例子。如果需要,我将不胜感激,并提供更多详细信息。
答案 0 :(得分:1)
你可以建立一个类,它拥有你需要的所有字段:id,name,achievement(或者如果你有一对多的成就列表),日期等等 - 你需要的一切。因此,例如,此类名为EmployeeAchievement
。然后,您只需修改当前的ViewModel,使其具有名为List<EmployeeAchievement>
的{{1}}类型的字段。然后,您必须构建视图模型:
EmplAch
因此,在您的视图中,您可以使用:
YourViewModel model = new ViewModel();
model.EmplAch = (from emp in db.EmployeeAchievements
join empInfo in emp_db.EmployeeInformation
emp.EmployeeID == empInfo.EmployeeID
select new EmployeeAchievement
{
EmployeeID = emp.EmployeeID,
AchievementId = emp.id,
Date = emp.DateAchieved,
Achievement = emp.Achievement
});