您好我使用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
导航属性:帐户(一对一关系 请注意,user1具有帐户2,user2具有帐户1
我做了:var user = infoDB.Users.Include("Account");
This displays:
Ron $50
Carl $30
这表明罗恩有50美元,这是账号1,这是错误的,因为罗恩有账号2 ......
为什么这不起作用?
我在几个表中遇到过这个,不一定idUser必须是IdAccount,这只是一个例子来说明问题..
有什么想法吗?我一直在研究这个我从头开始做数据库而IdAccount是Account表的外键,但它做的是同样的事情......
我在ASP mvc框架中这样做,就像来自音乐教程的查询一样,但它似乎与Genres.Include(“专辑”)一起工作正常它与它是一个事实有关一对一的关系?
答案 0 :(得分:0)
我怀疑你在外键错误的时候从数据库中生成了EDMX,然后更新数据库以使其正确。
如果您检查导航属性的属性,它应该分解为字段/ FK级别,您将能够看到它。
如果删除edmx并从数据库重新创建,它应该按预期工作。
我们也可以通过查看edmx xml来确认这一点。
答案 1 :(得分:0)
我从您的other question开始关注此问题,我认为这是一个错误的外键关系问题。我的猜测是因为你的用户外键被称为Id,而EF期望Id
成为主键。通常,用户上的外键是User.AccountId
而不是User.Id
。
答案 2 :(得分:0)
来自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作为用户&lt; - &gt;帐户关系的外键。