簡體   English   中英

使用Code First從.NET Core EF加載相關實體

[英]loading related entities from .NET Core EF using Code First

我正在嘗試使用.NET Core EF和Code First加載相關實體,但是出現以下錯誤:-

System.InvalidOperationException: The property 'Roles' is not a navigation property of entity type 'ApplicationUser'. The 'Include(string)' method can only be used with a '.' separated list of navigation property names.

我的兩個模型如下

public class Role
{
    public short Id { get; set; }
    public string Name { get; set; }

    public ICollection<ApplicationUser> Users { get; set; }
}

public class ApplicationUser
{
    public long Id { get; set; }

    [Required(ErrorMessage = "This field is required")]
    public string Name { get; set; }
    [Required(ErrorMessage = "This field is required")]
    public string Surname { get; set; }
    public string HomeNo { get; set; }
    public string MobNo { get; set; }
    public short RoleId { get; set; }

    public string UserName { get; set; }
    [RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "Invalid Email Address")]
    public string Email { get; set; }
    public string Password { get; set; }

    public Role Role { get; set; }

我的上下文如下所示:

        modelBuilder.Entity<Role>().ToTable("Role");

        modelBuilder.Entity<ApplicationUser>().HasOne(c => c.Role)
                                        .WithMany(r => r.Users)
                                        .HasForeignKey(c => c.RoleId);
        modelBuilder.Entity<ApplicationUser>().ToTable("ApplicationUser");

並且我正在嘗試通過以下方法獲取authenticatedUser:-

   var verifiedUser = await GetById<ApplicationUser>(m => m.Email == user.Email, "Roles");

依次調用GenericService:-

    public async Task<T> GetById<TKey>(
        Expression<Func<T, bool>> filter = null,
        string includeProperties = "")
    {
        return await _genericRepository.Get<T>(filter, includeProperties);
    }

最后是GenericRepository:

    public async Task<T> Get<TKey>(Expression<Func<T, bool>> filter = null, string includeProperties = "")

    {
        IQueryable<T> query = Context.Set<T>();
        query = IncludePropertiesQuery(query, includeProperties);

        if (filter != null)
        {
            query = query.Where(filter);
        }

        return await query.SingleOrDefaultAsync();
    }

IncludePropertiesQuery看起來像這樣:-

    private IQueryable<T> IncludePropertiesQuery(IQueryable<T> query, string includeProperties = "")
    {
        if (includeProperties == null)
        {
            includeProperties = "";
        }

        includeProperties = includeProperties.Trim() ?? string.Empty;
        foreach (var includeProperty in includeProperties.Split
            (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
        {
            query = query.Include(includeProperty);
        }

        return query;

    }

這與我的DbContext和2個表之間的關系有關嗎?

感謝您的幫助和時間

如果“ includeProperties”參數為null或為空,則不能使用“ Include”擴展方法。 在您的代碼中添加邏輯以解決此問題。

顯然,EF7中的自動延遲加載存在問題

在這里看到問題

因此,在獲得用戶之后,我做了一個額外的步驟來獲得實際角色

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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