簡體   English   中英

Windows 10 UWP-實體核心SQLite:包含查詢錯誤

[英]Windows 10 uwp - Entity Core Sqlite : Include query error

在Windows 10 UWP應用程序中,我正在使用帶有Entity Framework Core 1.1的本地sqlite數據庫,並且除此以外,它現在可以正常工作:

我正在嘗試使用一個簡單的linq查詢來將相關對象包含到我的用戶對象中。 我測試了一些查詢,但是包含方法和選擇限制的lambda無效。

代碼示例:

public async Task<IUser> GetAsync(Guid id)
{
    // Working, but useless
    var user = await this.DbSet.Include(u => u.ProfileNavigation).FirstOrDefaultAsync();

    // Returns null
    var user1 = await this.DbSet.Include(u => u.ProfileNavigation).FirstOrDefaultAsync(u => u.IdGuid == id);

    // Returns null
    var user2 = await this.DbSet.Where(u => u.IdGuid == id).Include(u => u.ProfileNavigation).FirstOrDefaultAsync();

    // Returns null linked object
    User user3 = await this.DbSet.SingleOrDefaultAsync(u => u.IdGuid == id);
    await this.Context.Entry(user3).Reference(p => p.ProfileNavigation).LoadAsync();

    // Result valid but painfull
    User res = await (from u in this.DbSet
                      join p in this.Context.Set<Profile>() on u.ProfileGuid equals p.IdGuid
                      where u.IdGuid == id
                      select new User
                      {
                          Id = u.Id,
                          ProfileId = u.ProfileId,
                          ManagerUserId = u.ManagerUserId,
                          RegionId = u.RegionId,
                          Number = u.Number,
                          Password = u.Password,
                          FirstName = u.FirstName,
                          LastName = u.LastName,
                          Email = u.Email,
                          HideOnBoardAppConstr = u.HideOnBoardAppConstr,
                          ModifiedByUserId = u.ModifiedByUserId,
                          ProfileNavigation = p
                      }).FirstOrDefaultAsync();

    return res;
}

有人遇到這個問題並解決了嗎?

提前致謝。

有一個關於通過實體框架創建數據庫的官方文檔。

在本演練中,您將構建一個通用Windows平台(UWP)應用程序,該應用程序使用Entity Framework對本地SQLite數據庫執行基本數據訪問。

您應該能夠檢查是否包括BlogPost類作為示例的BloggingContext類。

還有一個有關實體框架加載相關實體的文檔。

渴望加載是一種過程,通過該過程,對一種類型的實體的查詢也將相關實體作為查詢的一部分進行加載。 急切的加載是通過使用Include方法來實現的。 例如,以下查詢將加載博客以及與每個博客相關的所有帖子。

例如:

BloggingContext類:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=blogging.db");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

包含查詢代碼:

using (var db = new BloggingContext())
{
    var blogs1 = db.Blogs.Include(b => b.Posts).ToList();
}

通過為每個請求使用數據庫上下文實例,可以部分解決此問題。 這個問題與上下文的注入注入有關(我嘗試過使用SimpleIoc和Microsoft.Extensions.DependencyInjection),但是這仍然讓我感到困惑。

歡迎任何意見。

暫無
暫無

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

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