在Windows 10 UWP应用程序中,我正在使用带有Entity Framework 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;
}
有没有人有这个问题并解决了它?
提前致谢。
答案 0 :(得分:0)
有一份关于create Database by the Entity Framework的官方文件。
在本演练中,您将构建一个通用Windows平台(UWP)应用程序,该应用程序使用Entity Framework对本地SQLite数据库执行基本数据访问。
您应该能够检查包含Blog
和Post
类的BloggingContext类是否为样本。
还有Entity Framework Loading Related Entities的文档。
预先加载是一种过程,即对一种类型的实体的查询也会将相关实体作为查询的一部分加载。通过使用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();
}
答案 1 :(得分:0)
通过为每个请求使用数据库上下文实例可以部分解决此问题。问题与上下文的依赖注入有关(我尝试使用SimpleIoc和Microsoft.Extensions.DependencyInjection),但它仍然让我感到困惑。
欢迎任何评论。