ADO.NET Entity Framework Problem beim Vergleich von strings?



  • Morgen Gemeinde,

    ich hab ne Datenbank da sind 3 Tabellen drinne. Die eine Tabelle beinhaltet User, diese haben natürlich nen username, usw.
    Der username ist als text in der DB hinterlegt.
    so nun stelle ich folgenden vergleich in meiner Anwendung an.

    using(wolEntities en = new wolEntities())
                {
                    try
                    {
                        var item = en.User.FirstOrDefault(pred => pred.userName == userName);//<----
                        item.userName = newUserName;
                        item.FirstName = firstname;
                        item.SureName = surename;
    
                        en.SaveChanges();
                    }
                    catch (Exception e)
                    {
                        _logger.ErrorFormat("error while updating user '{0}'; error:'{1}'", userName, e.Message);
                    }
                }
    

    Wobei wolentity das Entityobjekt ist, welches ich mir erzeugen lassen hab.
    Da wo ich markiert habe, bekomme ich immer ne exception das ich nvarchar und text nicht vergleichen kann. Warum aber? ist doch beides Text, ist ja auch in der db so hinterlegt, hat einer nen Plan?

    EDIT:genaue Exceptionmessage lautet:

    {"Die Datentypen text und nvarchar sind im equal to-Operator inkompatibel."}



  • Was ist der darunterliegende Provider?

    /Edit
    Die Anfrage ist korrekt, bei mir (SQL-Server 2005) läuft sowas.
    Es klingt eher danach, dass der darunterliegende Provider dein suchstring als sql-Datentyp text übersetzt, der in der tabelle wird ein varchar sein. Gibt es eine sql-Version (falls es überhaupt ms sql server ist) die den direkten Vergleich zwischen den beiden Datentypen nicht zuläßt?



  • MS SQL Server 2005 Express



  • Wenn man in einer sql-Shell z.B. eingibt:
    select * from User where username= like CAST('userName' AS ntext)
    kommt die beschriebene Fehlermeldung. Offensichtlich wird userName in den text-Datentyp übersetzt. (Bei mir in der Enterprise Edition läuft es)
    Hast du es mal eins der anderen Abfragesysteme probiert?

    var item = (en.User.WHERE("it.userName == @name", new ObjectParameter("name", userName))).FirstOrDefault();

    (ungeprüft)



  • Hmm sowas ähnliches habe ich auch schon gesehen aber noch nicht probiert. danke für den hinweis.


Anmelden zum Antworten