【问题标题】:How does .Include() Work?.Include() 如何工作?
【发布时间】:2011-07-20 18:41:53
【问题描述】:

您好,我在 Visual Studio 中使用实体图创建了一个数据库,并在其中添加了导航属性。我使用本教程创建了它http://geekswithblogs.net/danemorgridge/archive/2009/10/29/using-visual-studio-2010-beta-2-to-do-entity-framework.aspx 看起来是这样的

User Table
IdUser    Name    IdAccount
1         Ron      2
2         Carl     1

导航属性:帐户(一对一关系)

Account table
IdAccount    Amount
1             50
2             30

导航属性:Account(一对一关系 请注意,user1 有帐户 2,而 user2 有帐户 1

我做一个:var user = infoDB.Users.Include("Account");

This displays:
Ron $50
Carl $30

它显示 Ron 有 50 美元,这是 account1 的金额,这是错误的,因为 Ron 的帐号是 2....

为什么这不起作用?

我在几个表中都遇到过这个问题,idUser 不一定是 IdAccount,这只是说明问题的一个例子..

有什么想法吗?我一直在做这个我从头开始做数据库,IdAccount 是 Account 表的外键,但它在做同样的事情......

我在 ASP mvc 框架中执行此操作,就像音乐教程中的查询一样,但它似乎与 Genres.Include("Albums") 一起工作正常,这与它是一个事实有关吗?一对一的关系?

【问题讨论】:

  • 能否包含 edmx xml?

标签: asp.net asp.net-mvc linq linq-to-sql ef-code-first


【解决方案1】:

我怀疑您在外键错误时从数据库生成了 EDMX,然后更新了数据库以使其正确。

如果您检查导航属性的属性,它应该分解为字段/FK 级别,您将能够看到这一点。

如果您删除 edmx 并从数据库重新创建,它应该可以按预期工作。

我们也可以通过查看 edmx xml 来确认这一点。

【讨论】:

  • 对不起,没有看到ef code first tag...你是通过什么过程构建ef模型和数据库的?
  • 我完成了链接上显示的教程。我基本上是创建一个 ADO.net 实体数据模型,我创建了一个新数据库。我浏览了自动生成的脚本,并且能够看到外键实际上是正确分配的。但是我仍然得到相同的结果......我应该避免使用包含吗?创建模型后,我单击构建,然后右键单击图表并从图表构建数据库。
【解决方案2】:

我从您的other question 中关注了这一点,我认为这是一个不正确的外键关系问题。我的猜测是,这是因为您在用户上的外键称为 Id,而 EF 期望 Id 是主键。通常,用户上的外键是 User.AccountId 而不是 User.Id

【讨论】:

    【解决方案3】:

    来自here

    Code First 现在将推断任何名为 <navigation property name><primary key property name> (i.e. SubjectISBN)<principal class name><primary key property name>(即 BookISBN)或 <primary key property name>(即 ISBN)的属性与主键具有相同的数据类型,表示关系的外键。如果找到多个匹配项,则按上面列出的顺序给出优先级。外键检测不区分大小写。

    尝试将您的键名改为“AccountId”而不是“IdAccount”。我的猜测是它使用 IdUser 作为 UserAccount 关系的外键。

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2018-02-12
      • 2013-08-20
      相关资源
      最近更新 更多