2017-05-28 8 views
3

既存のデータベースにマップしようとしています。以下のコードを使用して特定のエンティティの結果リストを取得すると、私は期待した結果を返します。EFCore、多対多、DBまず、ナビゲーションプロパティが機能しない

しかし、UserBookテーブルに対して単純なリストクエリに.Include(x => x.Book)を追加しようとすると、結果セットは空になります。

[Table("User")] 
public class User 
{ 
    [Key] 
    public Guid UserId { get; set; } 
    public string UserName{ get; set; } 

    // Reference 
    public ICollection<UserBook> UserBooks { get; set; } 
} 

[Table("Book")] 
public class Book 
{ 
    [Key] 
    public Guid BookId { get; set; } 
    public string BookName{ get; set; } 

    // Reference 
    public ICollection<UserBook> UserBooks { get; set; } 
} 

[Table("UserBook")] 
public class UserBook 
{ 
    public Guid UserId { get; set; } 
    public Guid BookId { get; set; } 
    public int PermissionMask { get; set; } 
    public bool Deleted { get; set; } 

    // Ref 
    public User User { get; set; } 
    public Book Book { get; set; } 
} 

私は命令がここにレイアウト以下だ:私はEFがそれを文句を言うだろうと思う

// Returns 1,000+ rows. 
_context.UserBooks.ToList(); 

// Returns 1 row 
_context.UserBooks 
    .Where(x => x.UserId == "SomeGuid") 
    .ToList(); 

// Returns 0 rows 
_context.UserBooks 
    .Include(x => x.Book) 
    .Where(x => x.UserId == "SomeGuid") 
    .ToList(); 

// Returns 0 rows 
_context.UserBooks.Include(x => x.Book).ToList(); 
+2

「私のUserBookテーブルはUserIdのプライマリキーを使用します。」多対多関係の場合、これがどのように機能するのでしょうか。 –

+0

私は提供されたダイアグラムを外していました。 SSMSをダブルチェックすると、コンポジットキーを使用していることがわかります。最初にソースをチェックしておくべきです、それは私の悪です。これを反映するように質問が更新されましたが、初期の問題はまだありません。 –

+0

失敗したクエリを表示できますか? –

答えて

1

http://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration

をよりよくここに、問題を説明するために私が使用しているクエリがありますUserBookエンティティにはキーが定義されておらず、どのように動作させるかわかりません。しかし、インクルードの作業をするためには、複合キーを明示する必要があると思います。あなたのDbContextクラスに以下を追加してみてください:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    modelBuilder.Entity<UserBook>(e => e.HasKey(c => new { c.UserId, c.BookId })); 
} 
0

あなたのマッピングが非NULL可能外部キーを(そうEFクエリで内部結合が生成されます)を示しています。外部キーのデータ型をGuidからGuidに変更してみてください。そしてさらに試みる。

関連する問題