В настоящее время я работаю над собственной версией членства, используя Entity Framework 4.0 и POCO.
После прочтения поста в блоге Скотта Гу я решил максимально использовать условные обозначения.
Пока у меня есть класс с именем User:
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; }
}
и класс с именем Role
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 = "abc@yahoo.com",
Password = "xyz",
Roles = new List<Role>
{
roles[0]
}
}
};
users.ForEach(u => context.Users.Add(u));
}
Надеюсь, здесь есть смысл. Если нет, то в основном приведенный выше код заполняет таблицы фиктивными данными, если схема базы данных изменяется.
пока что все отлично. Я получаю следующие таблицы:
Роли, Роли_Пользователи и пользователи
у них всех есть информация, которая мне нужна, но проблема в том, что я использую следующий запрос LINQ в своем классе репозитория, чтобы получить всех пользователей:
public IQueryable<User> GetAllUsers()
{
IQueryable<User> allUsers = from u in _backboneDbContext.Users select u;
return allUsers;
}
Теперь, если я проверяю всех пользователей перед тем, как передать его в View, я получаю своих пользователей, но для Role установлено значение 'Null'
Не знаю почему ... Есть идеи? Спасибо.