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.dll
a fájlraSystem.Core.dll
.Rendelkezik (
Imports
Visual Basic) vagyusing
(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 boolean
lesz következtetve: , nem nullable
boolean
. Amikor a lefordított összehasonlítás null értéket ad meg, a rendszer megpróbálja hozzárendelni az a-t nullable
boolean
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.