2017-05-28 6 views
3

Ich versuche, zu einer vorhandenen Datenbank zuzuordnen. Wenn ich den unten stehenden Code verwende und eine Liste mit Ergebnissen für eine bestimmte Entität abrufe, bekomme ich die erwarteten Ergebnisse zurück.EFCore, Viele-zu-Viele, DB Zuerst funktionieren die Navigationseigenschaften nicht

Wenn ich jedoch versuche, .Include(x => x.Book) zu einer einfachen Listenabfrage gegen die UserBook Tabelle hinzuzufügen, gibt meine Ergebnismenge leer.

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

ich die Anweisungen bin nach layed hier aus: http://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration

besser Um das Problem zu veranschaulichen, hier sind die Abfragen Ich verwende:

// 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

'meine UserBook-Tabelle verwendet einen Primärschlüssel von UserId' Ich frage mich, wie das funktioniert, wenn es eine Viele-zu-Viele-Beziehung ist –

+0

Ich ging von einem Diagramm, das mir zur Verfügung gestellt wurde; Überprüfen Sie SSMS, ich sehe, dass es einen zusammengesetzten Schlüssel verwendet. Hätte die Quelle zuerst überprüfen sollen, das ist mein Fehler. Aktualisierte Frage, um dies zu reflektieren, aber das erste Problem steht immer noch. –

+0

Können Sie uns die fehlgeschlagene Abfrage zeigen? –

Antwort

1

denke ich EF würde sich beschweren, dass UserBook-Entity hat keine Schlüssel definiert, nicht sicher, wie Sie es zum Laufen gebracht haben. Aber um das Include zu machen, glaube ich, dass Sie den Composite-Key explizit angeben müssen. Versuchen Sie folgendes zu Ihrem DbContext Klasse hinzufügen:

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

Ihre Abbildung zeigt einen Nicht-Nullable-Fremdschlüssel (so EF generiert eine innere in der Join-Abfrage). Versuchen Sie, den Datentyp für die Fremdschlüssel von Guid zu Guid zu ändern? und versuche es erneut.

Verwandte Themen