【问题标题】:Pulling related data in MVC 3 from separate database从单独的数据库中提取 MVC 3 中的相关数据
【发布时间】:2013-04-03 12:53:51
【问题描述】:

作为 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 和模型文件。我还没有找到我在这里尝试做的任何好的例子。我会很感激任何帮助,如果需要可以提供更多细节。

【问题讨论】:

  • 为什么你不在 ViewModel 中添加 'List Infoes' 和 'List Achieves'?然后,您可以在视图中使用它:Model.Infoes 和 Model.Achieves
  • 我不明白这种方法是如何关联视图中的数据。如何为正确的员工显示“员工姓名”,以便当我说 model=>employeeAchievements[i] 时,它会为 model=>employeeInfo[i] 提取正确的名称?

标签: asp.net-mvc database multiple-databases database-first


【解决方案1】:

您可以构建一个类,该类包含您需要的所有字段:id、姓名、成就(或如果您有一对多的列表,则为它们的列表)、日期等等 - 您需要的一切。例如,这个类被命名为EmployeeAchievement。然后,您只需将当前 ViewModel 修改为具有名为 EmplAch 的类型为 List&lt;EmployeeAchievement&gt; 的字段。然后,您必须构建视图模型:

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
                 });

所以,在您看来,您可以使用:

@for (int i = 0; i < model.EmplAch.Count; i++)
{
    <tr valign="top">
        <td>
            <div class="editor-field">
                @Html.EditorFor(model => model.EmplAch[i].EmployeeID)
                @Html.ValidationMessageFor(model => model.EmplAch[i].EmployeeID)
            </div>
        </td>
// Display employee name next
}

【讨论】:

  • 现在我明白了。来自 WebForms 的 MVC 对我来说是一个小小的痛苦。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多