.NET 5 und EF Core - Serverabfrage enthält nicht existentes Datenfeld

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von MasterQ.

    .NET 5 und EF Core - Serverabfrage enthält nicht existentes Datenfeld

    Hallo,

    -- EDIT --
    hab's raus. Mal wieder 1 min nach dem Absetzen des Posts fiel es wie Schuppen von den Haaren.

    Es ist das Feld Spielpläne in ATEntity, das das Problem verursacht. Wird das auskommentiert, dann läuft alles.

    Trotzdem lief das Ganze auf EF6 und es bleibt die Frage, Bug oder Feature?

    -- --

    ich verwende .NET 5 und EF Core für eine Projekt, das ich vorher auf .NET Framework 4.7.2 und EF 6 erfolgreich laufen hatte. Es sollte ja nichts großartiges zu verändern sein! ??

    Meine Entitätsklassen:

    C#-Quellcode

    1. [Table("tblAbenteuer")]
    2. public class ATEntity {
    3. [Key]
    4. public int ATID { get; set; }
    5. [Required]
    6. public string ATName { get; set; }
    7. public string ATBem { get; set; }
    8. // Navigation
    9. public ICollection<SpielplanEntity> Spielpläne { get; set; }
    10. public ATEntity() {
    11. Spielpläne = new HashSet<SpielplanEntity>();
    12. }
    13. public override string ToString() => ATName;
    14. }


    C#-Quellcode

    1. [Table("tblSpielpläne")]
    2. public class SpielplanEntity {
    3. [Key]
    4. public int SpielplanID { get; set; }
    5. [Required]
    6. //[ForeignKey("Abenteuer")]
    7. public int ATID { get; set; }
    8. [Required]
    9. public string Titel { get; set; }
    10. public string Transport { get; set; }
    11. public string Generäle { get; set; }
    12. public string KartePfad { get; set; }
    13. public override string ToString() => Titel;
    14. }


    und mein Context

    C#-Quellcode

    1. class DSOContext :DbContext {
    2. public ILoggerFactory loggerFactory;
    3. public virtual DbSet<ATEntity> Abenteuer { get; set; }
    4. public virtual DbSet<SpielplanEntity> Spielpläne { get; set; }
    5. public virtual DbSet<SpielzugEntity> Spielzüge { get; set; }
    6. public DSOContext() {
    7. loggerFactory = LoggerFactory.Create(xx => { xx.AddConsole(); });
    8. }
    9. protected override void OnConfiguring(DbContextOptionsBuilder oBuilder) {
    10. if (!oBuilder.IsConfigured) {
    11. oBuilder.UseNpgsql(Properties.Resources.ConnectionString);
    12. oBuilder.UseLoggerFactory(loggerFactory);
    13. oBuilder.EnableSensitiveDataLogging();
    14. }
    15. }
    16. protected override void OnModelCreating(ModelBuilder modelBuilder) {
    17. //throw new NotImplementedException();
    18. }
    19. }



    Und dann kommt folgende Abfrage

    C#-Quellcode

    1. var Spielpläne = db.Spielpläne.Where(xx => xx.ATID == atID).OrderBy(xx => xx.Titel).ToList();


    Hier schmiert mein Programm ab. Auf dem Server kommt folgendes SQL-Kommando an:

    SQL-Abfrage

    1. SELECT t."SpielplanID", t."ATEntityATID", t."ATID", t."Generäle", t."KartePfad", t."Titel", t."Transport"
    2. FROM "tblSpielpläne" AS t
    3. WHERE t."ATID" = $1
    4. ORDER BY t."Titel"


    wo kommt t."ATEntityATID" her?? In der Version !Core taucht dieses im SQL Kommando nicht auf.

    ATID ist ein Fremdschlüssel auf ATEntity.ATID. Soweit so gut. Aber was soll das ATEntityATID?? Das gibt es doch gar nicht? Bug oder Feature??

    Noch ein paar Details. Ich greife auf eine PostgreSQL Datenbank zu und verwende dazu das Npgsql Core Paket.

    Gruß

    MQ

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MasterQ“ ()

    MasterQ schrieb:

    wo kommt t."ATEntityATID" her??

    Hallo
    EF Core sieht noch mal etwas mehr auf die Namenskonvention als EF 6 und ist hier etwas "genauer". Des weiteren sieht EF hier vermutlich keine Relation.

    Mach mal in die Klasse SpielplanEntity folgendes rein:

    C#-Quellcode

    1. [Required]
    2. public int AbenteuerID { get; set; }
    3. public ATEntity Abenteuer { get; set; }


    Grüße
    Sascha

    Edit:

    MasterQ schrieb:

    Trotzdem lief das Ganze auf EF6 und es bleibt die Frage, Bug oder Feature?

    Es kann auch gut sein das du unter EF 6 etwas per Fluent API konfiguriert hast was ja unter EF Core genauso möglich ist.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##