簡體   English   中英

如何使用IdentityUser和Entity Framework加載鏈接的實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM