В настоящее время я работаю над своей собственной версией членства, используя Entity Framework 4.0 и POCO.Entity Framework 4 (запрос Linq не возвращает мои роли)
После подготовки сообщения в блоге Скотта Гуля я решил использовать соглашения как можно больше.
До сих пор у меня есть класс с именем пользователя:
public class User
{
[System.ComponentModel.DataAnnotations.Key]
public int UserId { get; set; }
[System.ComponentModel.DataAnnotations.StringLength(60)]
public string UserName { get; set; }
public string Password { get; set; }
[System.ComponentModel.DataAnnotations.ConcurrencyCheck]
public string Email { get; set; }
[System.ComponentModel.DataAnnotations.Timestamp]
public byte[] Timestamp { get; set; }
public ICollection<Role> Roles { get; set; }
}
и класс под названием Роль
public class Role
{
[System.ComponentModel.DataAnnotations.Key]
public int RoleId { get; set; }
[System.ComponentModel.DataAnnotations.StringLength(50)]
public string RoleName { get; set; }
[System.ComponentModel.DataAnnotations.StringLength(300)]
public string RoleDescription { get; set; }
public ICollection<User> Users { get; set; }
}
Я также реализовать DbContext так:
public class BackboneDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
Затем на основе того, что Скотт предложил создать класс Initializer, наследующий от RecreateDatabaseIfModelChanges.
Тогда в этом классе я добавить некоторые фиктивные элементы, как это:
protected override void Seed(BackboneDbContext context)
{
var roles = new List<Role>
{
new Role
{
RoleId = 0,
RoleName = "User",
RoleDescription = "This role belong to normal users.",
}
};
roles.ForEach(r => context.Roles.Add(r));
var users = new List<User>
{
new User {UserId = 1,
UserName = "Elham",
Email = "[email protected]ahoo.com",
Password = "xyz",
Roles = new List<Role>
{
roles[0]
}
}
};
users.ForEach(u => context.Users.Add(u));
}
Я надеюсь, что это имеет смысл до здесь. Если нет, в основном вышеуказанный код заполняет таблицы фиктивными данными, если изменяется схема базы данных.
до сих пор все абсолютно здорово. Я получаю следующие таблицы:
Роли, Roles_Users и пользователь
все они имеют информацию, мне нужно, но проблема в том, когда я использую следующий LINQ запрос в моем Repository класса, чтобы получить все ПОЛЬЗОВАТЕЛЬ:
public IQueryable<User> GetAllUsers()
{
IQueryable<User> allUsers = from u in _backboneDbContext.Users select u;
return allUsers;
}
теперь, если я проверяю ALLUSERS перед передачей его для просмотра, чтобы мои пользователи, но роль устанавливается в «Null»
Я не знаю, почему ... Есть идеи? Спасибо.
Спасибо большое, что был правильным ответом, и теперь он работает, я сделал свойства виртуальными! :) Я предпочитаю ленивую загрузку .... – Raha