Ответ 1
Попробуйте загрузить роли, включив их явно:
Member admin = db.Members.Include("Roles").FirstOrDefault(m => m.Name == "Admin");
Не знаю, как правильно это назвать. У меня два объекта в m: n отношениях: член и роль.
public class Role
{
public int Id { get; set; }
public string Title { get; set; }
public ICollection<Member> MembersInRole { get; set; }
}
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public ICollection<Role> Roles { get; set; }
}
Я сделал некоторые данные о семени:
http://i56.tinypic.com/2vjvj1w.png
И написал тест:
http://i54.tinypic.com/112916b.png
Проблема заключается в том, что мой член-член не имеет назначенных ролей, даже когда я создал их в контексте (как вы можете видеть на изображениях). Я не знаю, что случилось. Таблицы в базе данных выглядят нормально. Я не уверен, что что-то не так с контекстными экземплярами. Но это должно быть хорошо, потому что я все время работаю с данными семян.
Попробуйте загрузить роли, включив их явно:
Member admin = db.Members.Include("Roles").FirstOrDefault(m => m.Name == "Admin");
Свойства навигации MembersRole
и Roles
не являются виртуальными, поэтому EF не может использовать прокси-сервер для ленивой загрузки. Из-за этого вы должны явно спросить EF, чтобы загрузить ваши свойства навигации. Пометить свойства как виртуальные:
public class Role
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Member> MembersInRole { get; set; }
}
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
Или используйте подход @Yakimych. Желательная загрузка в EF 4.1 также может быть определена с помощью lambdas:
Member admin = db.Members.Include(m => m.Roles)
.FirstOrDefault(m => m.Name == "Admin");