Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst]EFCore: Die angegebene Umwandlung ist ungültg
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

[gelöst]EFCore: Die angegebene Umwandlung ist ungültg

beantworten | zitieren | melden

verwendetes Datenbanksystem: MSSQL

Verzweifelt suche ich meinen Fehler.
In einer Webanwendung wird per jQuery-$.Ajax eine Funktion im Webservice aufgerufen.

In dieser wird eine kleine Datenbankabfrage per EF Core getätigt.
Die identische Abfrage habe ich in anderen Funktionen, welches absolut kein Problem darstellt und alles funktioniert wunderbar.
Nur in dieser nicht.
Die Javascript Funktion wird per Button auf der Weboberfläche aufgerufen, wie alle anderen auch:

 var request =
    {
        "method": "POST",
        "url": urlReset,
        "data": {authorisation: "xy" }
    }
    $.ajax(request)
        .done(function (ergebnis) {
            alert("success");
        });

Die Funktion im Backend wird aufgerufen:


[HttpPost]
        public ActionResult ResetWagen(string authorisation)
        {
.......


Dann wird per Using die Abfrage gemacht:


using (var content = new MyContext())
            {
                
                var resData = content.PulverDataMan.AsQueryable().Where(x => x.IWagenNr == "99");

                if (resData.Any())//Datensatz vorhanden?
                {


Per Haltepunkt auf .Any(), Erweiterung auf Ergebinsansicht
steht im Feld "Message" die Meldung:
Fehler
Die angegebene Umwandlung ist ungültg

Jetzt stellt sich mir die Frage: Welche Umwandlung?

IWagenNr ist vom Typ String, siehe DbContext


 [Column("WagenNr")]      
        public string IWagenNr { get; set; }


Also sollte

 x.IWagenNr == "99"
keiner Umwandlung bedürfen.

InnerException gibt es nicht, im Stacktrace steht:

   bei Microsoft.Data.SqlClient.SqlBuffer.get_Byte() in H:\tsaagent2\_work\11\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlBuffer.cs:Zeile 168.
   bei Microsoft.Data.SqlClient.SqlDataReader.GetByte(Int32 i) in H:\tsaagent2\_work\11\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlDataReader.cs:Zeile 1794.
   bei lambda_method(Closure , QueryContext , DbDataReader , ResultContext , Int32[] , ResultCoordinator )
   bei Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
   bei System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

In Expression.DebugView steht:

.Call System.Linq.Queryable.Where(
    .Constant<Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Pulverlackierung.Models.ColModel]>(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Pulverlackierung.Models.ColModel]),
    '(.Lambda #Lambda1<System.Func`2[Pulverlackierung.Models.ColModel,System.Boolean]>))

.Lambda #Lambda1<System.Func`2[Pulverlackierung.Models.ColModel,System.Boolean]>(Pulverlackierung.Models.ColModel $x) {
    $x.IWagenNr == "99"
}
}

Wie bereits erwähnt ist die exakte Abfrage in anderen Funktionen ebenso vorhanden, ohne Probleme.

Was habe ich übersehen?
Ganz herzlichen Dank im Voraus.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von schuppsl am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15526
Herkunft: BW

beantworten | zitieren | melden

Kommt meistens davon, dass die Spalten in der DB andere Typen haben als Deine Eigenschaft in Deinem Modell.
Ist ja gut, dass die WagenNr ein string ist in Deinem Modell und Du mit == "99" das in Deinem Code behandelst; aber schlecht wenn die WagenNr in der DB gar kein String ist. Aber das sehen wir hier nicht.

Irritiert mich auch, dass in der Exception von einem Bool gesprochen wird, was ja sicherlich kein string ist.

PS: es sind Methoden, keine Funktionen.
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

beantworten | zitieren | melden

Der Datentyp in der Datenbank ist nvarchar(3).
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1413
Herkunft: NRW

beantworten | zitieren | melden

Möglicherweise verursacht ein anderes Feld diesen Fehler?
Immerhin rufst Du alle Spalten in der Datenbank ab, also muss er auch dafür sorgen, dass alle Datentypen passen.
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

beantworten | zitieren | melden

Hm, wirklich seltsam das ganze.
Der DbContext wurde per Migration, also Datebase First generiert.
Von daher sollten die Datentypen passen.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15526
Herkunft: BW

beantworten | zitieren | melden

Nein, müssen sie nicht.
Migrations ist nicht unbedingt das stabilste Feature von EFCore (wars auch nie). Auch fehlen Migrations immer noch sehr viele Features, die aber zB DACPACs haben.
Daher verwenden die meisten Leute, die mit EF arbeiten, auch kein Migrations (mir eingeschlossen).
Fehler
bei Microsoft.Data.SqlClient.SqlDataReader.GetByte(Int32 i)
irgendwo is nen Byte im Spiel, das Probleme macht.
private Nachricht | Beiträge des Benutzers
schuppsl
myCSharp.de - Member



Dabei seit:
Beiträge: 784

Themenstarter:

beantworten | zitieren | melden

Natürlich hattest Du recht.

Es war in einem Datenbankfeld, welches als smallint, NULL definiert ist.
Aus irgendeinem Grund ist es in meinem Model byte, korrekt ist aber short?.

Da das Feld einfach so herumdümpelt und ich noch nie gebraucht habe, ist mir das bisher noch nie aufgefallen.

Herzlichen Dank an alle für die Mühe und Zeit.
private Nachricht | Beiträge des Benutzers