我正在尝试使用 Entity Framework 5 来查询现有的 MySQL 数据库。按照MSDN 上的本教程,我使用代码优先创建了一个映射到现有数据库的基于代码的模型。
我有两张桌子:users
和buddies
。AUser
有一个id
,一个name
和一个email
。ABuddy
有一个user_id
和一个buddy_id
。AUser
有很多Buddies
(也是Users
)。该buddy_id
列是一个外键回到Users
表中。所以每一个User
都有很多Users
通过Buddies
。
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public IList<User> Buddies { get; set; }
}
这是我的数据库访问代码:
using (var db = new Models.fooContext())
{
foreach (Models.user user in db.users)
{
var u = new User
{
Id = user.id,
Name = user.name,
Email = user.email,
Buddies = new List<User>()
};
// this is obviously very inefficient but I am just
// trying to get anything to work
foreach (Models.buddy buddy in db.buddies) // this line throws an exception
{
if (buddy.user_id == user.id)
{
var b = new User();
// take buddy.user_id and find this user in the user table
u.Buddies.Add(b);
}
}
// serialize User and write it to a file here
}
}
此代码在上面指示的行中引发以下异常:
System.Data.EntityCommandExecutionException:执行命令定义时发生错误。有关详细信息,请参阅内部异常。”
内部异常是MySql.Data.MySqlClient.MySqlException
带有消息的
已经有一个打开的 DataReader 与此 Connection 关联,必须先关闭它。
我的问题:
- 如何创建一个告诉 EF 每个
User
都有很多的关系Buddies
? - 一旦 EF 了解 a
User
有很多Buddies
,我如何使用buddy_id
来查找该User
记录Buddy
?