Mapping del tipo SQL-CLRSQL-CLR Type Mapping

In LINQ to SQL viene eseguito il mapping del modello di dati di un database relazionale a un modello a oggetti espresso nel linguaggio di programmazione desiderato.In LINQ to SQL, the data model of a relational database maps to an object model that is expressed in the programming language of your choice. Quando viene eseguita l'applicazione, LINQ to SQL converte in SQL le query LINQ (Language Integrated Query) nel modello a oggetti e le invia al database per l'esecuzione.When the application runs, LINQ to SQL translates the language-integrated queries in the object model into SQL and sends them to the database for execution. Quando il database restituisce i risultati, questi vengono nuovamente convertiti da LINQ to SQL in oggetti che è possibile usare nel linguaggio di programmazione desiderato.When the database returns the results, LINQ to SQL translates the results back to objects that you can work with in your own programming language.

Per convertire dati tra il modello a oggetti e il database, un mapping dei tipi deve essere definita.In order to translate data between the object model and the database, a type mapping must be defined. LINQ to SQL usa un mapping dei tipi per associare ogni tipo Common Language Runtime (CLR) a un tipo di SQL Server specifico.LINQ to SQL uses a type mapping to match each common language runtime (CLR) type with a particular SQL Server type. È possibile definire mapping dei tipi e altre informazioni sul mapping, ad esempio la struttura del database e le relazioni tra tabelle, nel modello a oggetti con mapping basato sugli attributi.You can define type mappings and other mapping information, such as database structure and table relationships, inside the object model with attribute-based mapping. In alternativa, è possibile specificare le informazioni sul mapping al di fuori del modello a oggetti con un file di mapping esterno.Alternatively, you can specify the mapping information outside the object model with an external mapping file. Per ulteriori informazioni, vedere Mapping basato sugli attributi e Mapping esterno.For more information, see Attribute-Based Mapping and External Mapping.

In questo argomento vengono trattati gli aspetti seguenti:This topic discusses the following points:

Mapping dei tipi predefinitiDefault Type Mapping

È possibile creare automaticamente il modello a oggetti o il file di mapping esterno tramite Progettazione relazionale oggetti o lo strumento da riga di comando SQLMetal.You can create the object model or external mapping file automatically with the Object Relational Designer (O/R Designer) or the SQLMetal command-line tool. I mapping dei tipi predefiniti per questi strumenti definiscono i tipi CLR scelti per il mapping alle colonne nel database di SQL Server.The default type mappings for these tools define which CLR types are chosen to map to columns inside the SQL Server database. Per ulteriori informazioni sull'utilizzo di questi strumenti, vedere la creazione del modello oggetto.For more information about using these tools, see Creating the Object Model.

È inoltre possibile usare il metodo CreateDatabase per creare un database di SQL Server basato sulle informazioni sul mapping nel modello a oggetti o nel file di mapping esterno.You can also use the CreateDatabase method to create a SQL Server database based on the mapping information in the object model or external mapping file. I mapping dei tipi predefiniti per il metodo CreateDatabase definiscono il tipo di colonne di SQL Server create per eseguire il mapping ai tipi CLR nel modello a oggetti.The default type mappings for the CreateDatabase method define which type of SQL Server columns are created to map to the CLR types in the object model. Per ulteriori informazioni, vedere procedura: creazione di un Database in modo dinamico.For more information, see How to: Dynamically Create a Database.

Matrice del comportamento in fase di esecuzione del mapping dei tipiType Mapping Run-time Behavior Matrix

Nel diagramma seguente viene illustrato il comportamento previsto in fase di esecuzione dei mapping dei tipi specifici quando i dati vengono recuperati dal o salvati nel database.The following diagram shows the expected run-time behavior of specific type mappings when data is retrieved from or saved to the database. Ad eccezione della serializzazione, LINQ to SQL non supporta il mapping tra i tipi di dati CLR o SQL Server non specificati in questa matrice.With the exception of serialization, LINQ to SQL does not support mapping between any CLR or SQL Server data types that are not specified in this matrix. Per ulteriori informazioni sul supporto della serializzazione, vedere serializzazione binaria.For more information on serialization support, see Binary Serialization.

Nota

Alcuni mapping dei tipi possono comportare eccezioni di overflow o di perdita di dati durante la conversione da o verso il database.Some type mappings may result in overflow or data loss exceptions while translating to or from the database.

Mapping dei tipi personalizzatoCustom Type Mapping

LINQ to SQL consente di usare altri mapping rispetto ai mapping dei tipi predefiniti usati in Progettazione relazionale oggetti, in SQLMetal e dal metodo CreateDatabase.With LINQ to SQL, you are not limited to the default type mappings used by the O/R Designer, SQLMetal, and the CreateDatabase method. È possibile creare mapping dei tipi personalizzati specificandoli in modo esplicito in un file DBML.You can create custom type mappings by explicitly specifying them in a DBML file. È quindi possibile usare tale file DBML per creare il file di mapping e di codice del modello a oggetti.Then you can use that DBML file to create the object model code and mapping file. Per ulteriori informazioni, vedere mapping del tipo personalizzato SQL-CLR.For more information, see SQL-CLR Custom Type Mappings.

Differenze di comportamento tra l'esecuzione CLR e l'esecuzione SQLBehavior Differences Between CLR and SQL Execution

A causa di alcune differenze di precisione ed esecuzione tra CLR e SQL Server, è possibile ottenere risultati diversi o riscontrare un comportamento diverso a seconda della posizione in cui vengono eseguiti i calcoli.Because of differences in precision and execution between the CLR and SQL Server, you may receive different results or experience different behavior depending on where you perform your calculations. I calcoli effettuati in query LINQ to SQL vengono effettivamente convertiti in Transact-SQL e quindi eseguiti nel database di SQL Server.Calculations performed in LINQ to SQL queries are actually translated to Transact-SQL and then executed on the SQL Server database. I calcoli effettuati al di fuori di query LINQ to SQL vengono eseguiti nel contesto di CLR.Calculations performed outside LINQ to SQL queries are executed within the context of the CLR.

Di seguito vengono illustrate alcune differenze di comportamento tra CLR e SQL Server:For example, the following are some differences in behavior between the CLR and SQL Server:

  • In SQL Server alcuni tipi di dati vengono ordinati in modo diverso rispetto a dati del tipo equivalente in CLR.SQL Server orders some data types differently than data of equivalent type in the CLR. I dati di SQL Server di tipo UNIQUEIDENTIFIER, ad esempio, vengono ordinati in modo diverso dai dati CLR di tipo System.Guid.For example, SQL Server data of type UNIQUEIDENTIFIER is ordered differently than CLR data of type System.Guid.

  • In SQL Server alcune operazioni di confronto tra stringhe vengono gestite in modo diverso rispetto a CLR.SQL Server handles some string comparison operations differently than the CLR. In SQL Server il comportamento del confronto tra stringhe dipende dalle impostazioni delle regole di confronto configurate nel server.In SQL Server, string comparison behavior depends on the collation settings on the server. Per ulteriori informazioni, vedere utilizzano le regole di confronto nella documentazione Online di Microsoft SQL Server.For more information, see Working with Collations in the Microsoft SQL Server Books Online.

  • SQL Server può restituire valori diversi per alcune funzioni mappate rispetto ai valori restituiti da CLR.SQL Server may return different values for some mapped functions than the CLR. Differiscono, ad esempio, le funzioni di uguaglianza, in quanto SQL Server considera uguali due stringhe solo se differiscono nello spazio vuoto iniziale, mentre tali stringhe vengono considerate diverse in CLR.For example, equality functions will differ because SQL Server considers two strings to be equal if they only differ in trailing white space; whereas the CLR considers them to be not equal.

Mapping dei tipi EnumEnum Mapping

LINQ to SQL supporta il mapping del tipo System.Enum CLR ai tipi di SQL Server tramite due modalità diverse:LINQ to SQL supports mapping the CLR System.Enum type to SQL Server types in two ways:

  • Mapping ai tipi numerici SQL (TINYINT, SMALLINT, INT, BIGINT)Mapping to SQL numeric types (TINYINT, SMALLINT, INT, BIGINT)

    Quando si esegue il mapping di un tipo System.Enum CLR a un tipo numerico SQL, viene eseguito il mapping del valore intero sottostante del tipo System.Enum CLR al valore della colonna del database di SQL Server.When you map a CLR System.Enum type to a SQL numeric type, you map the underlying integer value of the CLR System.Enum to the value of the SQL Server database column. Se, ad esempio, un tipo System.Enum denominato DaysOfWeek contiene un membro denominato Tue con un valore intero sottostante pari a 3, tale membro verrà mappato a un valore del database pari a 3.For example, if a System.Enum named DaysOfWeek contains a member named Tue with an underlying integer value of 3, that member maps to a database value of 3.

  • Mapping ai tipi di testo SQL (CHAR, NCHAR, VARCHAR, NVARCHAR)Mapping to SQL text types (CHAR, NCHAR, VARCHAR, NVARCHAR)

    Quando si esegue il mapping di un tipo System.Enum CLR a un tipo di testo SQL, il valore del database SQL viene mappato ai nomi dei membri System.Enum CLR.When you map a CLR System.Enum type to a SQL text type, the SQL database value is mapped to the names of the CLR System.Enum members. Se, ad esempio, un tipo System.Enum denominato DaysOfWeek contiene un membro denominato Tue con un valore intero sottostante pari a 3, tale membro verrà mappato a un valore del database pari a Tue.For example, if a System.Enum named DaysOfWeek contains a member named Tue with an underlying integer value of 3, that member maps to a database value of Tue.

Nota

Quando si esegue il mapping dei tipi di testo SQL a un tipo System.Enum CLR, includere solo i nomi dei membri Enum nella colonna SQL mappata.When mapping SQL text types to a CLR System.Enum, include only the names of the Enum members in the mapped SQL column. Gli altri valori non sono supportati nella colonna SQL mappata a Enum.Other values are not supported in the Enum-mapped SQL column.

Progettazione relazionale oggetti e lo strumento da riga di comando SQLMetal non consentono di eseguire automaticamente il mapping di un tipo SQL a una classe Enum CLR.The O/R Designer and SQLMetal command-line tool cannot automatically map a SQL type to a CLR Enum class. È necessario configurare in modo esplicito questo mapping personalizzando un file DBML per l'uso da parte di Progettazione relazionale oggetti e SQLMetal.You must explicitly configure this mapping by customizing a DBML file for use by the O/R Designer and SQLMetal. Per ulteriori informazioni sui mapping dei tipi personalizzato, vedere mapping del tipo personalizzato SQL-CLR.For more information about custom type mapping, see SQL-CLR Custom Type Mappings.

Poiché una colonna SQL per l'enumerazione è dello stesso tipo di altre colonne numeriche e di testo, Questi strumenti non riconosce la finalità e per impostazione predefinita per il mapping come descritto di seguito mapping dei tipi numerici e testo e Mapping XML sezioni.Because a SQL column intended for enumeration will be of the same type as other numeric and text columns; these tools will not recognize your intent and default to mapping as described in the following Numeric Mapping and Text and XML Mapping sections. Per ulteriori informazioni sulla generazione di codice con il file DBML, vedere generazione di codice in LINQ to SQL.For more information about generating code with the DBML file, see Code Generation in LINQ to SQL.

Il metodo DataContext.CreateDatabase crea una colonna SQL di tipo numerico per eseguire il mapping di un tipo System.Enum CLR.The DataContext.CreateDatabase method creates a SQL column of numeric type to map a CLR System.Enum type.

Mapping dei tipi numericiNumeric Mapping

LINQ to SQL consente di eseguire il mapping di molti dei tipi numerici CLR e di SQL Server.LINQ to SQL lets you map many CLR and SQL Server numeric types. La tabella seguente illustra i tipi CLR selezionati da Progettazione relazionale oggetti e da SQLMetal durante la compilazione di un modello a oggetti o del file di mapping esterno basato sul database.The following table shows the CLR types that O/R Designer and SQLMetal select when building an object model or external mapping file based on your database.

Tipo di SQL ServerSQL Server Type Mapping dei tipi CLR predefinito usato in Progettazione relazionale oggetti e SQLMetalDefault CLR Type mapping used by O/R Designer and SQLMetal
BIT System.Boolean
TINYINT System.Int16
INT System.Int32
BIGINT System.Int64
SMALLMONEY System.Decimal
MONEY System.Decimal
DECIMAL System.Decimal
NUMERIC System.Decimal
REAL/FLOAT(24) System.Single
FLOAT/FLOAT(53) System.Double

La tabella seguente illustra i mapping dei tipi predefiniti usati dal metodo DataContext.CreateDatabase per determinare il tipo delle colonne SQL create per il mapping ai tipi CLR definiti nel modello a oggetti o nel file di mapping esterno.The next table shows the default type mappings used by the DataContext.CreateDatabase method to define which type of SQL columns are created to map to the CLR types defined in your object model or external mapping file.

Tipo CLRCLR Type Tipo di SQL Server predefinito usato da DataContext.CreateDatabaseDefault SQL Server Type used by DataContext.CreateDatabase
System.Boolean BIT
System.Byte TINYINT
System.Int16 SMALLINT
System.Int32 INT
System.Int64 BIGINT
System.SByte SMALLINT
System.UInt16 INT
System.UInt32 BIGINT
System.UInt64 DECIMAL(20)
System.Decimal DECIMAL(29,4)
System.Single REAL
System.Double FLOAT

Benché sia possibile scegliere tra molti altri mapping dei tipi numerici, alcuni possono comportare eccezioni di overflow o di perdita di dati durante la conversione da o verso il database.There are many other numeric mappings you can choose, but some may result in overflow or data loss exceptions while translating to or from the database. Per ulteriori informazioni, vedere il tipo Mapping matrice fase di esecuzione comportamento.For more information, see the Type Mapping Run Time Behavior Matrix.

Tipi Decimal e MoneyDecimal and Money Types

La precisione predefinita di SQL Server DECIMAL tipo (18 cifre decimali a sinistra e a destra del separatore decimale) è molto inferiore alla precisione di CLR Decimal tipo di cui è abbinato per impostazione predefinita.The default precision of SQL Server DECIMAL type (18 decimal digits to the left and right of the decimal point) is much smaller than the precision of the CLR Decimal type that it is paired with by default. Questa differenza può comportare una perdita di precisione quando si salvano dati nel database.This can result in precision loss when you save data to the database. Può tuttavia verificarsi il contrario se il tipo DECIMAL di SQL Server viene configurato con più di 29 cifre di precisione.However, just the opposite can happen if the SQL Server DECIMAL type is configured with greater than 29 digits of precision. Quando un tipo DECIMAL di SQL Server viene configurato con una precisione maggiore del tipo System.Decimal CLR, può verificarsi una perdita di precisione durante il recupero di dati dal database.When a SQL Server DECIMAL type has been configured with a greater precision than the CLR System.Decimal, precision loss can occur when retrieving data from the database.

I tipi MONEY e SMALLMONEY di SQL Server, abbinati anch'essi al tipo System.Decimal CLR per impostazione predefinita, hanno una precisione di gran lunga inferiore, che può comportare eccezioni di overflow o di perdita di dati quando si salvano dati nel database.The SQL Server MONEY and SMALLMONEY types, which are also paired with the CLR System.Decimal type by default, have a much smaller precision, which can result in overflow or data loss exceptions when saving data to the database.

Mapping dei tipi di testo e XMLText and XML Mapping

LINQ to SQL consente di eseguire il mapping anche di molti tipi XML e basati su testo.There are also many text-based and XML types that you can map with LINQ to SQL. La tabella seguente illustra i tipi CLR selezionati da Progettazione relazionale oggetti e da SQLMetal durante la compilazione di un modello a oggetti o del file di mapping esterno basato sul database.The following table shows the CLR types that O/R Designer and SQLMetal select when building an object model or external mapping file based on your database.

Tipo di SQL ServerSQL Server Type Mapping dei tipi CLR predefinito usato in Progettazione relazionale oggetti e SQLMetalDefault CLR Type mapping used by O/R Designer and SQLMetal
CHAR System.String
NCHAR System.String
VARCHAR System.String
NVARCHAR System.String
TEXT System.String
NTEXT System.String
XML System.Xml.Linq.XElement

La tabella seguente illustra i mapping dei tipi predefiniti usati dal metodo DataContext.CreateDatabase per determinare il tipo delle colonne SQL create per il mapping ai tipi CLR definiti nel modello a oggetti o nel file di mapping esterno.The next table shows the default type mappings used by the DataContext.CreateDatabase method to define which type of SQL columns are created to map to the CLR types defined in your object model or external mapping file.

Tipo CLRCLR Type Tipo di SQL Server predefinito usato da DataContext.CreateDatabaseDefault SQL Server Type used by DataContext.CreateDatabase
System.Char NCHAR(1)
System.String NVARCHAR(4000)
System.Char[]System.Char[] NVARCHAR(4000)
Tipo personalizzato che implementa Parse() e ToString()Custom type implementing Parse() and ToString() NVARCHAR(MAX)

Benché sia possibile scegliere tra molti altri mapping dei tipi XML e basati su testo, alcuni possono comportare eccezioni di overflow o di perdita di dati durante la conversione da o verso il database.There are many other text-based and XML mappings you can choose, but some may result in overflow or data loss exceptions while translating to or from the database. Per ulteriori informazioni, vedere il tipo Mapping matrice fase di esecuzione comportamento.For more information, see the Type Mapping Run Time Behavior Matrix.

Tipi XMLXML Types

Il tipo di dati XML di SQL Server è disponibile a partire da Microsoft SQL Server 2005.The SQL Server XML data type is available starting in Microsoft SQL Server 2005. È possibile eseguire il mapping del tipo di dati XML di SQL Server a XElement, XDocument o String.You can map the SQL Server XML data type to XElement, XDocument, or String. Se nella colonna sono archiviati frammenti XML che non possono essere letti in XElement, per evitare errori di runtime è necessario eseguire il mapping della colonna a String.If the column stores XML fragments that cannot be read into XElement, the column must be mapped to String to avoid run-time errors. Di seguito vengono indicati i frammenti XML di cui è necessario eseguire il mapping a String:XML fragments that must be mapped to String include the following:

  • Una sequenza di elementi XMLA sequence of XML elements

  • AttributiAttributes

  • Identificatori pubbliciPublic Identifiers (PI)

  • CommentiComments

Anche se è possibile eseguire il mapping XElement e XDocument a SQL Server, come illustrato nel tipo Mapping matrice fase di esecuzione comportamento, DataContext.CreateDatabase non dispone di alcun mapping dei tipi SQL Server predefinito per questi tipi.Although you can map XElement and XDocument to SQL Server as shown in the Type Mapping Run Time Behavior Matrix, the DataContext.CreateDatabase method has no default SQL Server type mapping for these types.

Tipi personalizzatiCustom Types

Se una classe implementa Parse() e ToString(), è possibile eseguire il mapping dell'oggetto a qualsiasi tipo di testo SQL (CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, NTEXT, XML).If a class implements Parse() and ToString(), you can map the object to any SQL text type (CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, NTEXT, XML). L'oggetto viene archiviato nel database inviando il valore restituito da ToString() alla colonna mappata del database.The object is stored in the database by sending the value returned by ToString() to the mapped database column. L'oggetto viene ricostruito richiamando Parse() sulla stringa restituita dal database.The object is reconstructed by invoking Parse() on the string returned by the database.

Nota

LINQ to SQL non supporta la serializzazione tramite System.Xml.Serialization.IXmlSerializable.LINQ to SQL does not support serialization by using System.Xml.Serialization.IXmlSerializable.

Mapping dei tipi data e oraDate and Time Mapping

LINQ to SQL consente di eseguire il mapping di molti dei tipi data e ora di SQL Server.With LINQ to SQL, you can map many SQL Server date and time types. La tabella seguente illustra i tipi CLR selezionati da Progettazione relazionale oggetti e da SQLMetal durante la compilazione di un modello a oggetti o del file di mapping esterno basato sul database.The following table shows the CLR types that O/R Designer and SQLMetal select when building an object model or external mapping file based on your database.

Tipo di SQL ServerSQL Server Type Mapping dei tipi CLR predefinito usato in Progettazione relazionale oggetti e SQLMetalDefault CLR Type mapping used by O/R Designer and SQLMetal
SMALLDATETIME System.DateTime
DATETIME System.DateTime
DATETIME2 System.DateTime
DATETIMEOFFSET System.DateTimeOffset
DATE System.DateTime
TIME System.TimeSpan

La tabella seguente illustra i mapping dei tipi predefiniti usati dal metodo DataContext.CreateDatabase per determinare il tipo delle colonne SQL create per il mapping ai tipi CLR definiti nel modello a oggetti o nel file di mapping esterno.The next table shows the default type mappings used by the DataContext.CreateDatabase method to define which type of SQL columns are created to map to the CLR types defined in your object model or external mapping file.

Tipo CLRCLR Type Tipo di SQL Server predefinito usato da DataContext.CreateDatabaseDefault SQL Server Type used by DataContext.CreateDatabase
System.DateTime DATETIME
System.DateTimeOffset DATETIMEOFFSET
System.TimeSpan TIME

Benché sia possibile scegliere tra molti altri mapping dei tipi data e ora, alcuni possono comportare eccezioni di overflow o di perdita di dati durante la conversione da o verso il database.There are many other date and time mappings you can choose, but some may result in overflow or data loss exceptions while translating to or from the database. Per ulteriori informazioni, vedere il tipo Mapping matrice fase di esecuzione comportamento.For more information, see the Type Mapping Run Time Behavior Matrix.

Nota

I tipi di dati DATETIME2, DATETIMEOFFSET, DATE e TIME di SQL Server sono disponibili a partire da Microsoft SQL Server 2008.The SQL Server types DATETIME2, DATETIMEOFFSET, DATE, and TIME are available starting with Microsoft SQL Server 2008. LINQ to SQL supporta il mapping a questi nuovi tipi a partire da .NET Framework versione 3.5 SP1.LINQ to SQL supports mapping to these new types starting with the .NET Framework version 3.5 SP1.

System.DatetimeSystem.Datetime

L'intervallo e la precisione del tipo System.DateTime CLR sono maggiori dell'intervallo e della precisione del tipo DATETIME di SQL Server, che rappresenta il mapping dei tipi predefiniti per il metodo DataContext.CreateDatabase.The range and precision of the CLR System.DateTime type is greater than the range and precision of the SQL Server DATETIME type, which is the default type mapping for the DataContext.CreateDatabase method. Per evitare eccezioni relative a date non incluse nell'intervallo di DATETIME, usare DATETIME2, disponibile a partire da Microsoft SQL Server 2008.To help avoid exceptions related to dates outside the range of DATETIME, use DATETIME2, which is available starting with Microsoft SQL Server 2008. DATETIME2 può corrispondere all'intervallo e precisione di CLR System.DateTime.DATETIME2 can match the range and precision of the CLR System.DateTime.

Le date di SQL Server non includono alcun concetto di TimeZone, una funzionalità ampiamente supportata in CLR.SQL Server dates have no concept of TimeZone, a feature that is richly supported in the CLR. I valori di TimeZone vengono salvati così come sono nel database senza conversione TimeZone, indipendentemente dalle informazioni DateTimeKind originali.TimeZone values are saved as is to the database without TimeZone conversion, regardless of the original DateTimeKind information. Quando i valori di DateTime vengono recuperati dal database, il relativo valore viene caricato così com'è in un oggetto DateTime con un valore DateTimeKind corrispondente a Unspecified.When DateTime values are retrieved from the database, their value is loaded as is into a DateTime with a DateTimeKind of Unspecified. Per ulteriori informazioni su supportato System.DateTime metodi, vedere metodi System. DateTime.For more information about supported System.DateTime methods, see System.DateTime Methods.

System.TimeSpanSystem.TimeSpan

Microsoft SQL Server 2008 e .NET Framework 3.5 SP1 consentono di eseguire il mapping del tipo System.TimeSpan CLR al tipo TIME di SQL Server.Microsoft SQL Server 2008 and the .NET Framework 3.5 SP1 let you map the CLR System.TimeSpan type to the SQL Server TIME type. Vi è tuttavia una notevole differenza tra l'intervallo supportato dal tipo System.TimeSpan CLR e quello supportato dal tipo TIME di SQL Server.However, there is a large difference between the range that the CLR System.TimeSpan supports and what the SQL Server TIME type supports. Se si esegue il mapping di valori minori di 0 o maggiori delle ore 23.59.59.9999999 al tipo TIME di SQL Server, verranno restituite eccezioni di overflow.Mapping values less than 0 or greater than 23:59:59.9999999 hours to the SQL TIME will result in overflow exceptions. Per ulteriori informazioni, vedere metodi System. TimeSpan.For more information, see System.TimeSpan Methods.

In Microsoft SQL Server 2000 e SQL Server 2005 non è possibile eseguire il mapping dei campi del database a TimeSpan.In Microsoft SQL Server 2000 and SQL Server 2005, you cannot map database fields to TimeSpan. Sono tuttavia supportate operazioni su TimeSpan, in quanto è possibile che i valori TimeSpan vengano restituiti da una sottrazione DateTime o vengano introdotti in un'espressione come un valore letterale o una variabile associata.However, operations on TimeSpan are supported because TimeSpan values can be returned from DateTime subtraction or introduced into an expression as a literal or bound variable.

Mapping dei tipi binariBinary Mapping

Vi sono molti tipi di SQL Server di cui è possibile eseguire il mapping al tipo System.Data.Linq.Binary CLR.There are many SQL Server types that can map to the CLR type System.Data.Linq.Binary. La tabella seguente illustra i tipi di SQL Server che determinano in Progettazione relazionale oggetti e SQLMetal la definizione di un tipo System.Data.Linq.Binary CLR durante la compilazione di un modello a oggetti o un file di mapping esterno basato sul database.The following table shows the SQL Server types that cause O/R Designer and SQLMetal to define a CLR System.Data.Linq.Binary type when building an object model or external mapping file based on your database.

Tipo di SQL ServerSQL Server Type Mapping dei tipi CLR predefinito usato in Progettazione relazionale oggetti e SQLMetalDefault CLR Type mapping used by O/R Designer and SQLMetal
BINARY(50) System.Data.Linq.Binary
VARBINARY(50) System.Data.Linq.Binary
VARBINARY(MAX) System.Data.Linq.Binary
VARBINARY(MAX) con il FILESTREAM attributoVARBINARY(MAX) with the FILESTREAM attribute System.Data.Linq.Binary
IMAGE System.Data.Linq.Binary
TIMESTAMP System.Data.Linq.Binary

La tabella seguente illustra i mapping dei tipi predefiniti usati dal metodo DataContext.CreateDatabase per determinare il tipo delle colonne SQL create per il mapping ai tipi CLR definiti nel modello a oggetti o nel file di mapping esterno.The next table shows the default type mappings used by the DataContext.CreateDatabase method to define which type of SQL columns are created to map to the CLR types defined in your object model or external mapping file.

Tipo CLRCLR Type Tipo di SQL Server predefinito usato da DataContext.CreateDatabaseDefault SQL Server Type used by DataContext.CreateDatabase
System.Data.Linq.Binary VARBINARY(MAX)
System.Byte VARBINARY(MAX)
System.Runtime.Serialization.ISerializable VARBINARY(MAX)

Benché sia possibile scegliere tra molti altri mapping dei tipi binari, alcuni possono comportare eccezioni di overflow o di perdita di dati durante la conversione da o verso il database.There are many other binary mappings you can choose, but some may result in overflow or data loss exceptions while translating to or from the database. Per ulteriori informazioni, vedere il tipo Mapping matrice fase di esecuzione comportamento.For more information, see the Type Mapping Run Time Behavior Matrix.

FILESTREAM di SQL ServerSQL Server FILESTREAM

L'attributo FILESTREAM per colonne VARBINARY(MAX) è disponibile a partire da Microsoft SQL Server 2008 e può essere mappato con LINQ to SQL a partire da .NET Framework versione 3.5 SP1.The FILESTREAM attribute for VARBINARY(MAX) columns is available starting with Microsoft SQL Server 2008; you can map to it with LINQ to SQL starting with the .NET Framework version 3.5 SP1.

Benché sia possibile eseguire il mapping di colonne VARBINARY(MAX) con l'attributo FILESTREAM a oggetti Binary, il metodo DataContext.CreateDatabase non è in grado di creare automaticamente colonne con l'attributo FILESTREAM.Although you can map VARBINARY(MAX) columns with the FILESTREAM attribute to Binary objects, the DataContext.CreateDatabase method is unable to automatically create columns with the FILESTREAM attribute. Per ulteriori informazioni su FILESTREAM, vedere Panoramica di FILESTREAM nella documentazione Online di Microsoft SQL Server.For more information about FILESTREAM, see FILESTREAM Overview on Microsoft SQL Server Books Online.

Serializzazione binariaBinary Serialization

Se una classe implementa l'interfaccia ISerializable, è possibile serializzare un oggetto in qualsiasi campo binario SQL, ad esempio BINARY, VARBINARY o IMAGE.If a class implements the ISerializable interface, you can serialize an object to any SQL binary field (BINARY, VARBINARY, IMAGE). L'oggetto viene serializzato e deserializzato in base alla modalità di implementazione dell'interfaccia ISerializable.The object is serialized and deserialized according to how the ISerializable interface is implemented. Per ulteriori informazioni, vedere serializzazione binaria.For more information, see Binary Serialization.

Mapping di tipi variMiscellaneous Mapping

La tabella seguente illustra i mapping dei tipi predefiniti per alcuni tipi vari non inclusi nelle sezioni precedenti.The following table shows the default type mappings for some miscellaneous types that have not yet been mentioned. La tabella seguente illustra i tipi CLR selezionati da Progettazione relazionale oggetti e da SQLMetal durante la compilazione di un modello a oggetti o del file di mapping esterno basato sul database.The following table shows the CLR types that O/R Designer and SQLMetal select when building an object model or external mapping file based on your database.

Tipo di SQL ServerSQL Server Type Mapping dei tipi CLR predefinito usato in Progettazione relazionale oggetti e SQLMetalDefault CLR Type mapping used by O/R Designer and SQLMetal
UNIQUEIDENTIFIER System.Guid
SQL_VARIANT System.Object

La tabella seguente illustra i mapping dei tipi predefiniti usati dal metodo DataContext.CreateDatabase per determinare il tipo delle colonne SQL create per il mapping ai tipi CLR definiti nel modello a oggetti o nel file di mapping esterno.The next table shows the default type mappings used by the DataContext.CreateDatabase method to define which type of SQL columns are created to map to the CLR types defined in your object model or external mapping file.

Tipo CLRCLR Type Tipo di SQL Server predefinito usato da DataContext.CreateDatabaseDefault SQL Server Type used by DataContext.CreateDatabase
System.Guid UNIQUEIDENTIFIER
System.Object SQL_VARIANT

LINQ to SQL non supporta altri mapping per tali tipi vari.LINQ to SQL does not support any other type mappings for these miscellaneous types. Per ulteriori informazioni, vedere il tipo Mapping matrice fase di esecuzione comportamento.For more information, see the Type Mapping Run Time Behavior Matrix.

Vedere ancheSee Also

Mapping basato su attributiAttribute-Based Mapping
External Mapping (Mapping esterno)External Mapping
Tipi di dati e funzioniData Types and Functions
Tipi SQL-CLR non corrispondentiSQL-CLR Type Mismatches