[英]How to load linked entities with IdentityUser and Entity Framework
我目前正在編寫一個小型測試應用程序,以了解IdentityUser的工作方式。
我創建了一個從IdentityUser繼承的MyUser類。 我的自定義用戶類的唯一附加屬性是Book類的集合。
我已經在控制器上創建了將新用戶成功存儲到數據庫和關聯的Book的方法。 問題是當我嘗試檢索用戶時,未填充該用戶的Books集合-它始終為null。
當我檢查數據庫時,我可以看到一本書與相關的用戶ID一起存儲在數據庫中,但是我似乎無法檢索到該收藏集。
這是我到目前為止的內容:
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 => b.MyUser_id == user.Id)從Book表中手動檢索所有書籍,但是intellisense甚至沒有給我MyUser_Id屬性圖書表。
我不太確定該怎么做。 我要做的就是為用戶自動加載所有關聯的書,但是我不確定該怎么做。 有任何想法嗎?
謝謝
您的Book類不包含外鍵參考的用戶信息。 嘗試添加
[ForeignKey("UserId")]
public MyUser User { get; set; }
到Book類的定義。
當您通過查詢獲得用戶時
_ctx.Users.Include(u=> u.Books)
應包括每個用戶的書籍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.