我正在尝试使用 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?