Megosztás a következőn keresztül:


Hibaelhárítás

Az alábbi információk a LINQ to SQL-alkalmazásokban előforduló problémákat ismertetik, é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 szakaszban hárítjuk el.

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

LINQ to SQL nem támogatja az összes szabványos lekérdezési operátor 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 to SQL Table<TEntity>tartalmaz, a lekérdezés a memóriában is végrehajtható, 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 le kell kérni az adatbázistáblából származó adatokat.

Ez a megközelítés nem hatékony, és jelentős memória- és processzorhasználatot eredményezhet. Próbálja meg 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 sztring (a /conn beállítás használatával) nem támogatott a fájlnév felvétele a kapcsolati sztring. További információt a SqlMetal.exe (Kódgenerálási eszköz) című témakörben talál.

Osztálytár-projektek

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

Kaszkádolt törlés

LINQ to SQL nem támogatja vagy ismeri fel a kaszkádolt törlési műveleteket. Ha olyan táblában szeretne törölni egy sort, 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óddal 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 jelez.

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 kérdezhető le; hiányzik egy szerelvényhivatkozás?" hiba, győződjön meg a következőkről:

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

  • Hivatkozással rendelkezik a és System.Data.Linq.dlla fájlraSystem.Core.dll.

  • Rendelkezik (ImportsVisual Basic) vagy using (C#) irányelvvel a és System.Data.Linqa számáraSystem.Linq.

DuplicateKeyException

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

Sztringösszefűzési kivételek

Az operandusok összefűzése és az egyéb [n][var]char műveletek nem támogatottak[n]text. Kivétel történik a két különböző típushoz rendelt sztringek összefűzéséhez. További információt a System.String metódusok című témakörben talál.

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

Identitástagokat (IsPrimaryKey) kell használnia, ha SQL Server 2000-adatbázist használ TakeSkip. A lekérdezésnek egyetlen táblán (azaz nem illesztésen) kell lennie, vagy , Except, , Intersectvagy Union műveletnek kell lennieDistinct, és nem tartalmazhat Concat műveletet. További információ: "SQL Server 2000 támogatás" szakasz a Standard lekérdezési operátor fordításában.

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

GroupBy InvalidOperationException

Ez a kivétel akkor jelenik meg, ha egy kifejezés (például group x by (Phone==@phone)) alapján boolean csoportosított lekérdezésben GroupBy egy oszlopérték null értékű. Mivel a kifejezés egy boolean, a kulcs a következőre booleanlesz következtetve: , nem nullableboolean. Amikor a lefordított összehasonlítás null értéket ad meg, a rendszer megpróbálja hozzárendelni az a-t nullableboolean egyhez boolean, és a kivétel ki lesz dobva.

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

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

OnCreated() Partial Method

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 LINQ to SQL meghívja a konstruktort, hogy másolatot készítsen az eredeti értékekről. Vegye figyelembe ezt a viselkedést, ha a metódust a OnCreated() saját részleges osztályában implementálja.

Lásd még