【问题标题】:Get data from multiple tables while editing in MVC在 MVC 中编辑时从多个表中获取数据
【发布时间】:2014-06-22 17:01:53
【问题描述】:

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

现在单击编辑时,我想将这些数据发送到编辑视图,这就是我遇到麻烦的地方。在我早期的表单中,我可以使用 db.find() 它只引用一个表,根据它的复合键,我能够找到与该表对应的所有数据。

我想在单击编辑时从 3 个表中获取记录,我可以成功地在我的索引视图中绑定这些记录。

下面是我的控制器代码:

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

据我说,我无法使用 db.find 从多个表中获取记录,因为它只会引用一个表。因此,为此我需要一些不同的逻辑。 任何帮助将不胜感激。在此先感谢..

下面是我的 linq 查询,我可以使用它从城市表中获取所有记录,从国家表中获取国家名称,从州表中获取州名。

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

这对我来说可以很好地在我的索引视图中显示记录。 现在,我想在编辑时在相应的文本框中显示相同的记录。

【问题讨论】:

  • 亲爱的你必须使用 Include 关键字
  • 查看@yasser 的答案,这是您问题的解决方案
  • 如果你能得到显示的数据,你可以很好地使用相同的数据在编辑时显示记录。
  • @Yasser - 问题是,从我的索引视图中,我将单击其中一条记录的编辑,并且该记录的所有数据都应传输到编辑视图,这就是我面临的问题。你能告诉我如何从各个表中获取国家名称和州名,从而将它们绑定到文本框中。或者直接将所有这些记录发送到编辑视图......?感谢您的所有帮助..

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


【解决方案1】:

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

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

You cannot use Find directly - 查找不适用于包含。

EF 团队是这样说的

我们决定不实现这一点,因为使用 Include 调用 Find 的语法不会比等效的 LINQ 查询简单得多:

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

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

【讨论】:

  • 首先谢谢,在这里我无法访问 Items 属性。一旦我进入数据库。我得到了所有的表格列表,但没有得到项目,所以你能告诉这个项目是什么吗?我需要声明什么才能访问项目属性。
  • 哦,不。项目只是一个例子。我将对其进行更改以避免与 TableName 混淆。
  • var test = db.City.Include("Country").Include("State").Where(c => c.CityID == cityID && c.CountryID == id && c. StateID == stateID ).ToList();我在做什么是正确的,因为它给出了错误。如果是,那么在我的编辑视图中,我有一个具有城市、州和国家属性的全局模型,那么如何将我分配给 var 测试的这个城市模型转换为全局模型。
  • var test = db.City.Include("Country").Include("State").Where(c => c.CityID == cityID && c.CountryID == id && c.StateID == stateID ) 只有在 City 具有与 Country 和 State 表相关的外键时才可能是正确的。 “Country”和“State”是表,CityId、CountryId和StateId都是Country表的字段。您是否收到编译时错误?还是运行时?
  • 城市表包含所有字段:CityID、StateID 和 CountryID
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2017-03-22
相关资源
最近更新 更多