Ho una domanda veloce qui. utilizzare prima il modello EF6.
var db = new MyEntities(GetEntityConnectionString());
ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<DOCUMENT> objectSet = objectContext.CreateObjectSet<DOCUMENT>();
var results = objectSet.Where("SqlServer.DATALENGTH(it.BINARYCONTENT)>50000");
Assert.IsTrue(results.ToList().Count == 9);
var results2 = objectSet.Where(doc=>System.Data.Objects.SqlClient.SqlFunctions.DataLength( doc.BINARYCONTENT)>50000);
Assert.IsTrue(results2.ToList().Count == 9);
var results3 = db.DOCUMENTS.Where(doc => System.Data.Objects.SqlClient.SqlFunctions.DataLength(doc.BINARYCONTENT) > 50000);
Assert.IsTrue(results3.ToList().Count == 9);
La prima affermazione ha esito positivo, quindi perché ottengo la seguente eccezione quando vengono eseguiti i risultati 2 e 3?
Un'eccezione di tipo "System.NotSupportedException" si è verificata in EntityFramework.SqlServer.dll ma non è stata gestita nel codice utente
Informazioni aggiuntive: LINQ to Entities non riconosce il metodo 'System.Nullable`1 [System.Int32] DataLength (Byte [])' e questo metodo non può essere tradotto in un'espressione di archivio.
C'è un modo per ottenere il successo degli altri asseriti?
Si scopre che la risposta è che sto usando la funzione sbagliata.
invece di
System.Data.Objects.SqlClient.SqlFunctions.DataLength
Dovrei usare
System.Data.Entity.SqlServer.SqlFunctions.DataLength
situato all'interno di EntityFramework.SqlServer.dll