Windows 10 UWP-实体核心sqlite:包括查询错误



在Windows 10 UWP应用程序中,我使用的是带有实体框架Core 1.1的本地SQLITE数据库,目前正常工作:

我正在尝试使用简单的LINQ查询将相关对象包括在我的用户对象中。我测试了一些查询,但是带有方法的lambdas和某些限制不起作用。

代码样本:

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类是示例。

还有一个用于实体框架加载相关实体的文档。

急切的加载是对一种类型实体的查询也将相关实体作为查询的一部分加载的过程。急切的加载是通过使用包含方法来实现的。例如,以下查询将加载博客和与每个博客有关的所有帖子。

例如:

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.spentencyIndostion),但它仍然使我感到困惑。

欢迎任何评论。

最新更新