[英]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數據庫執行基本數據訪問。
您應該能夠檢查是否包括Blog
和Post
類作為示例的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.