В настоящее время я пишу небольшое тестовое приложение, чтобы понять, как работает IdentityUser.Как загрузить связанные объекты с помощью IdentityUser и Entity Framework
Я создал класс MyUser, который наследуется от IdentityUser. Единственным дополнительным свойством в моем пользовательском классе является коллекция моего Книга.
Я создал методы на контроллере, которые успешно хранят новых пользователей в базе данных и связанных книгах. Проблема в том, что когда я пытаюсь загрузить пользователя, коллекция книг для этого пользователя не заполняется - она всегда равна нулю.
Когда я проверяю базу данных, я вижу, что книга хранится в базе данных с соответствующим идентификатором пользователя, но я не могу найти эту коллекцию.
Вот то, что я до сих пор:
Book.cs:
public class Book
{
public int Id { get; set; }
public string Isbn { get; set; }
public string Title { get; set; }
public string Author { get; set; }
}
MyUser.cs:
public class MyUser : IdentityUser
{
public IList<Book> Books { get; set; }
}
MyAppContext.cs:
public class MyAppContext : IdentityDbContext<MyUser>
{
public MyAppContext() : base("MyApp")
{
}
public DbSet<Book> Books { get; set; }
}
AuthRepository:
public class AuthRepository : IDisposable
{
private MyAppContext _ctx;
private UserManager<MyUser> _userManager;
public AuthRepository()
{
_ctx = new MyAppContext();
_userManager = new UserManager<MyUser>(new UserStore<MyUser>(_ctx));
}
public async Task<IdentityResult> RegisterUser(RegistrationModel userModel)
{
MyUser user = new MyUser();
user.UserName = userModel.UserName;
var result = await _userManager.CreateAsync(user, userModel.Password);
return result;
}
public async Task<IdentityResult> UpdateUser(MyUser userModel)
{
var result = await _userManager.UpdateAsync(userModel);
return result;
}
public async Task<MyUser> FindUser(string userName, string password)
{
var user = await _userManager.FindAsync(userName, password);
return user;
}
public async Task<MyUser> GetUser(string userName)
{
var user = await _userManager.FindByNameAsync(userName);
return user;
}
public void Dispose()
{
_ctx.Dispose();
_userManager.Dispose();
}
}
я полагал, может быть, в рамках метода GetUser() Я мог бы вручную извлечь все книги из таблицы книги с _ctx.Books.Where (б => b.MyUser_id == user.Id), однако intellisense даже не дает мне свойство MyUser_Id в таблице Books.
Я не уверен, как это сделать. Все, что я хочу сделать, это загрузить все связанные книги для пользователя автоматически, но я не уверен, как это сделать. Есть идеи?
Благодаря
Добавить UserId в ваш класс книги add Foreign key – Sefa