既存のデータベースにマップしようとしています。以下のコードを使用して特定のエンティティの結果リストを取得すると、私は期待した結果を返します。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();
「私のUserBookテーブルはUserIdのプライマリキーを使用します。」多対多関係の場合、これがどのように機能するのでしょうか。 –
私は提供されたダイアグラムを外していました。 SSMSをダブルチェックすると、コンポジットキーを使用していることがわかります。最初にソースをチェックしておくべきです、それは私の悪です。これを反映するように質問が更新されましたが、初期の問題はまだありません。 –
失敗したクエリを表示できますか? –