Hibaelhárítás

Az alábbi információk a LINQ-ban előforduló problémákat teszik elérhetővé az SQL-alkalmazások számára, és javaslatokat nyújtanak a problémák hatásának elkerülésére vagy más módon történő csökkentésére.

A további problémákat a gyakori kérdések között is meg kell oldani.

Nem támogatott standard lekérdezési operátorok

A LINQ–SQL nem támogatja az összes szabványos lekérdezési operátori metódust (például ElementAt). Ennek eredményeképpen a lefordított projektek futásidejű hibákat okozhatnak. További információ: Standard lekérdezési operátor fordítása.

Memóriaproblémák

Ha egy lekérdezés memórián belüli gyűjteményt és LINQ-t tartalmaz az SQL-hez Table<TEntity>, a lekérdezés végrehajtható a memóriában attól függően, hogy a két gyűjtemény milyen sorrendben van megadva. Ha a lekérdezést a memóriában kell végrehajtani, akkor az adatbázistáblából származó adatokat le kell kérni.

Ez a megközelítés nem hatékony, és jelentős memória- és processzorhasználatot eredményezhet. Próbálja elkerülni az ilyen többtartományos lekérdezéseket.

Fájlnevek és SQLMetal

Bemeneti fájlnév megadásához adja hozzá a nevet a parancssorhoz bemeneti fájlként. A kapcsolati sztringben szereplő fájlnév (a /conn opció használata) nem támogatott. További információ: SqlMetal.exe (Kódgenerálási eszköz).

Osztálytár-projektek

Az Objektumrelációs tervező létrehoz egy kapcsolati sztringet a app.config projekt fájljában. Az osztálytár-projektekben a app.config fájl nem használatos. A LINQ–SQL a tervezési időfájlokban megadott kapcsolati sztringet használja. Az érték app.config módosítása nem módosítja azt az adatbázist, amelyhez az alkalmazás csatlakozik.

Kaszkádolt törlés

A LINQ–SQL nem támogatja vagy ismeri fel a kaszkádolt törlési műveleteket. Ha olyan táblát szeretne törölni, amely korlátozásokkal rendelkezik, tegye a következők valamelyikét:

  • Állítsa be a szabályt ON DELETE CASCADE az adatbázis idegenkulcs-korlátozásában.

  • Saját kód használatával először törölje azokat a gyermekobjektumokat, amelyek megakadályozzák a szülőobjektum törlését.

Ellenkező esetben a rendszer kivételt SqlException vet ki.

További információ : Sorok törlése az adatbázisból.

A kifejezés nem kérdezhető le

Ha a "Kifejezés [kifejezés] nem lekérdezhető; hiányzik egy assembly hivatkozás?" hibaüzenetet kapja, győződjön meg a következőkről:

  • Az alkalmazás a .NET Compact Framework 3.5-öt célozza.

  • Rendelkezik hivatkozással System.Core.dll és System.Data.Linq.dll.

  • Van egy Imports (Visual Basic) vagy using (C#) irányelve a System.Linq és a System.Data.Linq.

DuplicateKeyException (duplikált kulcs kivétel)

A LINQ to SQL projekt hibakeresése során előfordulhat, hogy egy entitás kapcsolatai között navigál. Ezzel ezeket az elemeket a gyorsítótárba helyezi, és a LINQ az SQL-nek tudomást szerez a jelenlétükről. Ha ezután megpróbál végrehajtani Attach egy InsertOnSubmit vagy egy hasonló metódust, amely több olyan sort hoz létre, amely ugyanazzal a kulccsal rendelkezik, az a DuplicateKeyException lesz.

Sztringösszefűzési kivételek

A [n]text-hez illesztett operandusok és más, [n][var]char-hez kapcsolódó elemek összefűzése nem támogatott. Kivétel dobódik, amikor karakterláncokat fűznek össze, amelyek két különböző típus halmazra vannak leképezve. További információ: System.String Methods.

Kivételek kihagyása és kivétele az SQL Server 2000-ben

SQL Server 2000-adatbázis használatakor, ha IsPrimaryKey vagy Take használata mellett dönt, identitástagokat (Skip) kell használnia. A lekérdezésnek egyetlen táblára (azaz nem illesztésre), vagy Distinct, Except, Intersect, illetve Union műveletre kell irányulnia, és nem tartalmazhat Concat műveletet. További információ: "SQL Server 2000 támogatás" szakasz a Standard lekérdezéskezelő fordításában.

Ez a követelmény nem vonatkozik az SQL Server 2005-re.

GroupBy úgyműködési hiba (InvalidOperationException)

Ez a kivétel akkor jelenik meg, ha egy oszlop értéke null értékű egy GroupByboolean kifejezéssel csoportosított lekérdezésben, például group x by (Phone==@phone). Mivel a kifejezés egy boolean, a kulcs következtetett boolean-nek, nem pedig nullableboolean. Amikor a lefordított összehasonlítás null értéket ad meg, a rendszer megpróbál hozzárendelni egy nullableboolean-t egy boolean-hez, és ilyenkor kivétel keletkezik.

A helyzet elkerülése érdekében (feltételezve, hogy a null értékeket hamisként szeretné kezelni), használja az alábbihoz hasonló megközelítést:

GroupBy="(Phone != null) && (Phone=@Phone)"

OnCreated() Részleges metódus

A generált metódust OnCreated() minden alkalommal meghívja a rendszer, amikor meghívja az objektumkonstruktort, beleértve azt a forgatókönyvet is, amelyben a LINQ az SQL-hez meghívja a konstruktort, hogy készítsen másolatot az eredeti értékekről. Vegye figyelembe ezt a viselkedést, ha a metódust OnCreated() a saját részleges osztályában implementálja.

Lásd még