2017-03-09 26 views
0

を含め、私はEntity Frameworkのコア1.1でローカルのSQLiteデータベースを使用していますし、それはこれ以外今のところ正常に動作しています:のWindows 10 UWP - エンティティコアsqliteは:Windowsの10 UWPアプリケーションでクエリエラー

私は私のユーザオブジェクトに関連オブジェクトを含めるために、単純なlinqクエリを使用しようとしています。私はいくつかのクエリをテストしましたが、インクルードメソッドと選択制限付きのラムダは機能しません。

コードサンプル:

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

create Database by the Entity Frameworkについての公式文書があります。

このチュートリアルでは、Entity Frameworkを使用してローカルのSQLiteデータベースに対して基本的なデータアクセスを実行するUniversal Windows Platform(UWP)アプリケーションを構築します。

BlogPostクラスをサンプルとして含むBloggingContextクラスがあるかどうかを確認する必要があります。

Entity Framework Loading Related Entitiesのドキュメントもあります。

eager loadingは、1つのタイプのエンティティのクエリが関連するエンティティもクエリの一部として読み込むプロセスです。 Eagerの読み込みは、Includeメソッドを使用して行います。たとえば、以下のクエリは、ブログや各ブログに関連するすべての投稿を読み込みます。例えば

BloggingContextクラス:この問題は部分的にそれぞれのデータ・ベース・コンテキスト・インスタンスを使用することによって解決される

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

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; } 
} 

ザがクエリコードを含みます要求。この問題はコンテキストの貧血の注入(私はSimpleIocとMicrosoft.Extensions.DependencyInjectionを試してみた)にリンクしていましたが、それでも私にとっては混乱しています。

コメントは大歓迎です。

関連する問題