Risoluzione dei problemiTroubleshooting

Nelle informazioni seguenti vengono illustrati alcuni problemi che è possibile incontrare nelle applicazioni LINQ to SQLLINQ to SQL e vengono forniti suggerimenti per evitare o altrimenti ridurre l'effetto di questi problemi.The following information exposes some issues you might encounter in your LINQ to SQLLINQ to SQL applications, and provides suggestions to avoid or otherwise reduce the effect of these issues.

Altri problemi verranno risolti nelle domande frequenti su.Additional issues are addressed in Frequently Asked Questions.

Operatori di query standard non supportatiUnsupported Standard Query Operators

LINQ to SQLLINQ to SQL non supporta tutti i metodi degli operatori di query standard, ad esempio ElementAt. does not support all standard query operator methods (for example, ElementAt). Di conseguenza, durante la compilazione dei progetti possono comunque verificarsi errori di runtime.As a result, projects that compile can still produce run-time errors. Per ulteriori informazioni, vedere conversione dell'operatore Query Standard.For more information, see Standard Query Operator Translation.

Problemi di memoriaMemory Issues

Se una query implica una raccolta in memoria e LINQ to SQLLINQ to SQL Table<TEntity>, la query potrebbe essere eseguita in memoria, in base all'ordine in cui vengono specificate le due raccolte.If a query involves an in-memory collection and LINQ to SQLLINQ to SQL Table<TEntity>, the query might be executed in memory, depending on the order in which the two collections are specified. Se la query deve essere eseguita in memoria, sarà necessario recuperare i dati dalla tabella di database.If the query must be executed in memory, then the data from the database table will need to be retrieved.

Questo approccio non è quindi consigliato poiché può comportare un utilizzo significativo della memoria e del processore.This approach is inefficient and could result in significant memory and processor usage. Tentare di evitare tali query multidominio.Try to avoid such multi-domain queries.

Nomi file e SQLMetalFile Names and SQLMetal

Per specificare un nome file di input, aggiungere il nome nella riga di comando come file di input.To specify an input file name, add the name to the command line as the input file. Non è possibile includere il nome file nella stringa di connessione mediante l'opzione /conn .Including the file name in the connection string (using the /conn option) is not supported. Per altre informazioni, vedere SqlMetal.exe (strumento per la generazione del codice).For more information, see SqlMetal.exe (Code Generation Tool).

Progetti di librerie di classiClass Library Projects

La Object Relational DesignerObject Relational Designer crea una stringa di connessione nel file app.config del progetto.The Object Relational DesignerObject Relational Designer creates a connection string in the app.config file of the project. Nei progetti di librerie di classi il file app.config non viene usato.In class library projects, the app.config file is not used. LINQ to SQLLINQ to SQL usa la stringa di connessione fornita nei file della fase di progettazione. uses the Connection String provided in the design-time files. La modifica del valore in app.config non comporta la modifica del database al quale si connette l'applicazione.Changing the value in app.config does not change the database to which your application connects.

Eliminazione a catenaCascade Delete

LINQ to SQLLINQ to SQL non supporta o non riconosce operazioni di eliminazione a catena. does not support or recognize cascade-delete operations. Se si desidera eliminare una riga in una tabella contenente vincoli, è necessario effettuare una delle operazioni seguenti:If you want to delete a row in a table that has constraints against it, you must do either of the following:

  • Impostare la regola ON DELETE CASCADE nel vincolo di chiave esterna del database.Set the ON DELETE CASCADE rule in the foreign-key constraint in the database.

  • Usare il codice personalizzato per eliminare prima gli oggetti figlio che impediscono l'eliminazione dell'oggetto padre.Use your own code to first delete the child objects that prevent the parent object from being deleted.

In caso contrario, viene generata un'eccezione SqlException.Otherwise, a SqlException exception is thrown.

Per ulteriori informazioni, vedere procedura: eliminare righe dal Database.For more information, see How to: Delete Rows From the Database.

Espressione che non può essere sottoposta a queryExpression Not Queryable

Se viene visualizzato il "espressione [espressione] non è disponibile per query; Probabilmente manca un riferimento all'assembly."If you get the "Expression [expression] is not queryable; are you missing an assembly reference?" errore, verificare quanto segue:error, make sure of the following:

  • L'applicazione possa essere usata con .NET Compact Framework 3.5.NET Compact Framework 3.5.Your application is targeting .NET Compact Framework 3.5.NET Compact Framework 3.5.

  • È presente un riferimento a System.Core.dll e System.Data.Linq.dll.You have a reference to System.Core.dll and System.Data.Linq.dll.

  • È necessario un Imports (Visual Basic) o using direttiva (c#) per System.Linq e System.Data.Linq.You have an Imports (Visual Basic) or using (C#) directive for System.Linq and System.Data.Linq.

DuplicateKeyExceptionDuplicateKeyException

Nel corso del debug un LINQ to SQLLINQ to SQL progetto, è possibile attraversare le relazioni di un'entità.In the course of debugging a LINQ to SQLLINQ to SQL project, you might traverse an entity's relations. In questo modo consente di questi elementi inseriti nella cache e LINQ to SQLLINQ to SQL viene a conoscenza della loro presenza.Doing so brings these items into the cache, and LINQ to SQLLINQ to SQL becomes aware of their presence. Se si tenta quindi di eseguire Attach o InsertOnSubmit oppure un metodo simile che crea più righe con la stessa chiave, viene generata un'eccezione DuplicateKeyException.If you then try to execute Attach or InsertOnSubmit or a similar method that produces multiple rows that have the same key, a DuplicateKeyException is thrown.

Eccezioni di concatenazione di stringheString Concatenation Exceptions

La concatenazione su operandi di cui viene eseguito il mapping a [n]text e altri [n][var]char non è supportata.Concatenation on operands mapped to [n]text and other [n][var]char is not supported. Viene generata un'eccezione per la concatenazione di stringhe di cui viene eseguito il mapping a due set di tipi diversi.An exception is thrown for concatenation of strings mapped to the two different sets of types. Per ulteriori informazioni, vedere metodi System. String.For more information, see System.String Methods.

Come ignorare e accettare le eccezioni in SQL Server 2000Skip and Take Exceptions in SQL Server 2000

È necessario usare i membri di identità (IsPrimaryKey) quando si usa Take o Skip su un database SQL Server 2000.You must use identity members (IsPrimaryKey) when you use Take or Skip against a SQL Server 2000 database. La query deve essere eseguita su una singola tabella, ovvero non un join, o deve essere un'operazione Distinct, Except, Intersect o Union e non deve includere un'operazione Concat.The query must be against a single table (that is, not a join), or be a Distinct, Except, Intersect, or Union operation, and must not include a Concat operation. Per ulteriori informazioni, vedere la sezione "Supporto di SQL Server 2000" in conversione dell'operatore Query Standard.For more information, see the "SQL Server 2000 Support" section in Standard Query Operator Translation.

Questo requisito non si applica a SQL Server 2005SQL Server 2005.This requirement does not apply to SQL Server 2005SQL Server 2005.

GroupBy InvalidOperationExceptionGroupBy InvalidOperationException

Questa eccezione viene generata quando un valore di colonna è null in una query GroupBy che esegue il raggruppamento in base a un'espressione boolean, ad esempio group x by (Phone==@phone).This exception is thrown when a column value is null in a GroupBy query that groups by a boolean expression, such as group x by (Phone==@phone). Poiché l'espressione è un boolean, la chiave viene considerata boolean, non nullable``boolean.Because the expression is a boolean, the key is inferred to be boolean, not nullable``boolean. Quando il confronto convertito produce un valore null, viene effettuato un tentativo di assegnare un nullable``boolean per un boolean, e viene generata l'eccezione.When the translated comparison produces a null, an attempt is made to assign a nullable``boolean to a boolean, and the exception is thrown.

Per evitare questa situazione, presupponendo che si desideri trattare i valori null come false, usare un approccio analogo al seguente:To avoid this situation (assuming you want to treat nulls as false), use an approach such as the following:

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

Metodo parziale OnCreated()OnCreated() Partial Method

Il metodo OnCreated() generato viene chiamato ogni volta che viene chiamato il costruttore dell'oggetto, incluso lo scenario in cui LINQ to SQLLINQ to SQL chiama il costruttore per creare una copia dei valori originali.The generated method OnCreated() is called each time the object constructor is called, including the scenario in which LINQ to SQLLINQ to SQL calls the constructor to make a copy for original values. Tenere conto di questo comportamento se si implementa il metodo OnCreated() nella classe parziale personalizzata.Take this behavior into account if you implement the OnCreated() method in your own partial class.

Vedere ancheSee Also

Supporto per il debugDebugging Support
Domande frequentiFrequently Asked Questions