Как выразить отношение «имеет много сквозных» в Entity Framework 5?
Я пытаюсь использовать Entity Framework 5 для запроса существующей базы данных MySQL. Я использовал code-first для создания модели на основе кода, которая отображается в существующую базу данныхэтот учебник на MSDN.
У меня есть две таблицы:users
а такжеbuddies
,User
имеетid
,name
иemail
,Buddy
имеетuser_id
иbuddy_id
,User
имеет много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 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()
};
// 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, связанный с этим подключением, который должен быть закрыт первым.
Мои вопросы:
Как мне создать отношения, которые говорят EF, что каждыйUser
имеет много ?Buddies
Как только EF понимает, чтоUser
имеет многоBuddies
Как я могу использоватьbuddy_id
найтиUser
запись для этого?Buddy