在MVC中编辑时从多个表中获取数据

时间:2014-05-06 07:35:53

标签: c# asp.net-mvc linq entity-framework asp.net-mvc-4

在MVC中,我设计了一个视图,我可以从多个表中绑定数据,即我得到了 我在索引中显示的3个不同表格的不同记录。

现在点击编辑我想将这些数据发送到编辑视图,这是我遇到麻烦的地方。在我之前的表格中,我能够用 db.find()只引用一个表,并根据其复合键,我能够找到与该表对应的所有数据。

我想通过点击编辑从3个表中获取记录,我可以在我的索引视图中成功绑定。

以下是我的控制器代码:

objMyObj.MyModel = db.TableName.find(allcompositekeyshere);

根据我的说法,我无法从db.find的多个表中获取记录,因为它只能引用一个表。所以,为此,我想要一些不同的逻辑。 任何帮助将不胜感激。谢谢提前..

下面是我的linq查询,通过该查询,我可以从city表中获取所有记录以及来自country table的州名和州名表中的州名。

return objSvc.GetCityIndexData().Select(ct =>
                    new CityInputModel()
                    {
                        CityID = ct.CityID,
                        StateID = ct.StateID,
                        CountryID = ct.CountryID,
                        Name = ct.Name,
                        CountryName = ct.CountryName,
                        StateName = ct.StateName
                    }).ToList();

我可以在索引视图中显示记录。 现在,我想在编辑时在相应的文本框中显示相同的记录。

1 个答案:

答案 0 :(得分:3)

您可以尝试使用.Include()来包含对相关表格的引用。

var items = db.TableName
              .Include("FTable1")
              .Include("FTable2")
              .Where(allcompositekeyshere).ToList();

You cannot use Find directly - 查找无法使用包含。

这是EF团队所说的

  

我们已经决定不实现这一点,因为调用带有包含的查找的语法不会比等效的LINQ查询简单得多:

ctx.Products.Include(p => p.Category).Single(p => p.Id == 3)
  

Find还具有从内存中检索实体的逻辑(如果已经加载)。如果我们需要从内存中提取实体,然后针对部分或全部相关实体访问数据库(反之亦然),则会变得非常复杂。