

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# DBContext Classe Dynamo dal modello di persistenza degli oggetti.NET
<a name="DotNetDynamoDBContext"></a>

La classe `DynamoDBContext` è il punto di ingresso al database Amazon DynamoDB. Fornisce una connessione a DynamoDB e permette di accedere ai dati in varie tabelle, eseguire diverse operazioni CRUD ed eseguire query. La classe `DynamoDBContext` fornisce i metodi seguenti:

**Topics**
+ [Crea MultiTable BatchGet](#w2aac17b9c21c23c39b7)
+ [Crea MultiTable BatchWrite](#w2aac17b9c21c23c39b9)
+ [CreateBatchGet](#w2aac17b9c21c23c39c11)
+ [CreateBatchWrite](#w2aac17b9c21c23c39c13)
+ [Elimina](#w2aac17b9c21c23c39c15)
+ [Elimina](#w2aac17b9c21c23c39c17)
+ [Execute​Batch​Get](#w2aac17b9c21c23c39c19)
+ [Execute​Batch​Write](#w2aac17b9c21c23c39c21)
+ [FromDocument](#w2aac17b9c21c23c39c23)
+ [FromQuery](#w2aac17b9c21c23c39c25)
+ [FromScan](#w2aac17b9c21c23c39c27)
+ [Get​Target​Table](#w2aac17b9c21c23c39c29)
+ [Carica](#w2aac17b9c21c23c39c31)
+ [Query](#w2aac17b9c21c23c39c33)
+ [Save (Salva)](#w2aac17b9c21c23c39c35)
+ [Scan](#w2aac17b9c21c23c39c37)
+ [ToDocument](#w2aac17b9c21c23c39c39)
+ [Specificazione dei parametri opzionali per Dynamo DBContext](#OptionalConfigParams)

## Crea MultiTable BatchGet
<a name="w2aac17b9c21c23c39b7"></a>

Crea un oggetto `MultiTableBatchGet`, composto da più oggetti `BatchGet`. Ognuno di questi oggetti `BatchGet` può essere utilizzato per recuperare elementi da una singola tabella DynamoDB.

Per recuperare gli elementi dalle tabelle, utilizza il metodo `ExecuteBatchGet`, passando l'oggetto `MultiTableBatchGet` come parametro.

## Crea MultiTable BatchWrite
<a name="w2aac17b9c21c23c39b9"></a>

Crea un oggetto `MultiTableBatchWrite`, composto da più oggetti `BatchWrite`. Ognuno di questi oggetti `BatchWrite` può essere utilizzato per scrivere o eliminare elementi in una singola tabella DynamoDB.

Per scrivere sulle tabelle, utilizza il metodo `ExecuteBatchWrite`, passando l'oggetto `MultiTableBatchWrite` come parametro.

## CreateBatchGet
<a name="w2aac17b9c21c23c39c11"></a>

Crea un oggetto `BatchGet` da usare per recuperare più elementi da una tabella. 

## CreateBatchWrite
<a name="w2aac17b9c21c23c39c13"></a>

Crea un oggetto `BatchWrite` che è possibile utilizzare per inserire più elementi in una tabella o per eliminare più elementi da una tabella. 

## Elimina
<a name="w2aac17b9c21c23c39c15"></a>

Elimina un item dalla tabella. Il metodo richiede la chiave primaria dell'elemento che si desidera eliminare. È possibile fornire il valore della chiave primaria o un oggetto lato client contenente un valore di chiave primaria come parametro per questo metodo.
+ Se si specifica un oggetto lato client come parametro ed è stato abilitato il blocco ottimistico, l'eliminazione avrà esito positivo solo se le versioni lato client e lato server dell'oggetto corrispondono.
+ Se si specifica come parametro solo il valore della chiave primaria, l'eliminazione avrà esito positivo indipendentemente dal fatto che sia stato abilitato o meno il blocco ottimistico.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `DeleteAsync`.

## Elimina
<a name="w2aac17b9c21c23c39c17"></a>

Elimina tutte le risorse gestite e non gestite.

## Execute​Batch​Get
<a name="w2aac17b9c21c23c39c19"></a>

Legge i dati da una o più tabelle, elaborando tutti gli oggetti `BatchGet` in un `MultiTableBatchGet`.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `ExecuteBatchGetAsync`.

## Execute​Batch​Write
<a name="w2aac17b9c21c23c39c21"></a>

Scrive o elimina i dati in una o più tabelle, elaborando tutti gli oggetti `BatchWrite` in un `MultiTableBatchWrite`.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `ExecuteBatchWriteAsync`.

## FromDocument
<a name="w2aac17b9c21c23c39c23"></a>

Data un'istanza di un `Document`, il metodo `FromDocument` restituisce un'istanza di una classe lato client.

Ciò è utile se si desidera utilizzare le classi del modello di documento insieme al modello di persistenza degli oggetti per eseguire qualsiasi operazione sui dati. Per ulteriori informazioni sulle classi del modello di documento fornite da AWS SDK per .NET, vedere[Utilizzo del modello documentale .NET in DynamoDB](DotNetSDKMidLevel.md).

Si supponga di avere un oggetto `Document` denominato `doc`, che contiene una rappresentazione di un elemento `Forum`. Per vedere come costruire questo oggetto, consulta la descrizione del metodo `ToDocument` più avanti in questo argomento). È possibile utilizzare `FromDocument` per recuperare l'elemento `Forum`dal `Document`, come mostrato nell'esempio di codice C\$1 seguente.

**Example**  

```
forum101 = context.FromDocument<Forum>(101);
```

**Nota**  
Se l'oggetto `Document` implementa l'interfaccia `IEnumerable`, è possibile utilizzare invece il metodo `FromDocuments`. Ciò consente di eseguire iterazioni su tutte le istanze della classe nel `Document`.

## FromQuery
<a name="w2aac17b9c21c23c39c25"></a>

Esegue un'operazione `Query`, con i parametri di query definiti in un oggetto `QueryOperationConfig`.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `FromQueryAsync`.

## FromScan
<a name="w2aac17b9c21c23c39c27"></a>

Esegue un'operazione `Scan`, con i parametri di scansione definiti in un oggetto `ScanOperationConfig`.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `FromScanAsync`.

## Get​Target​Table
<a name="w2aac17b9c21c23c39c29"></a>

Recupera la tabella di destinazione per il tipo specificato. Ciò è utile se si sta scrivendo un convertitore personalizzato per mappare dati arbitrari a una tabella DynamoDB ed è necessario determinare quale tabella è associata a un tipo di dati personalizzato.

## Carica
<a name="w2aac17b9c21c23c39c31"></a>

Recupera un item da una tabella. Il metodo richiede solo la chiave primaria dell'elemento che si desidera recuperare. 

Per impostazione predefinita, DynamoDB restituisce l'elemento che dispone di valori che sono a consistenza finale. Per informazioni sul modello di consistenza finale, consulta [Coerenza di lettura di DynamoDB](HowItWorks.ReadConsistency.md).

`Load`or `LoadAsync` method chiama l'[GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)operazione, che richiede di specificare la chiave primaria per la tabella. Poiché `GetItem` ignora il parametro `IndexName`, non è possibile caricare un elemento utilizzando la partizione o la chiave di ordinamento di un indice. Pertanto, è necessario utilizzare la chiave primaria della tabella per caricare un elemento.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `LoadAsync`. Per visualizzare un esempio di utilizzo del metodo `LoadAsync` per eseguire operazioni CRUD di alto livello su una tabella DynamoDB, consulta l’esempio seguente.

```
    /// <summary>
    /// Shows how to perform high-level CRUD operations on an Amazon DynamoDB
    /// table.
    /// </summary>
    public class HighLevelItemCrud
    {
        public static async Task Main()
        {
            var client = new AmazonDynamoDBClient();
            DynamoDBContext context = new DynamoDBContext(client);
            await PerformCRUDOperations(context);
        }

        public static async Task PerformCRUDOperations(IDynamoDBContext context)
        {
            int bookId = 1001; // Some unique value.
            Book myBook = new Book
            {
                Id = bookId,
                Title = "object persistence-AWS SDK for.NET SDK-Book 1001",
                Isbn = "111-1111111001",
                BookAuthors = new List<string> { "Author 1", "Author 2" },
            };

            // Save the book to the ProductCatalog table.
            await context.SaveAsync(myBook);

            // Retrieve the book from the ProductCatalog table.
            Book bookRetrieved = await context.LoadAsync<Book>(bookId);

            // Update some properties.
            bookRetrieved.Isbn = "222-2222221001";

            // Update existing authors list with the following values.
            bookRetrieved.BookAuthors = new List<string> { " Author 1", "Author x" };
            await context.SaveAsync(bookRetrieved);

            // Retrieve the updated book. This time, add the optional
            // ConsistentRead parameter using DynamoDBContextConfig object.
            await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            // Delete the book.
            await context.DeleteAsync<Book>(bookId);

            // Try to retrieve deleted book. It should return null.
            Book deletedBook = await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            if (deletedBook == null)
            {
                Console.WriteLine("Book is deleted");
            }
        }
    }
```

## Query
<a name="w2aac17b9c21c23c39c33"></a>

Interroga una tabella in base ai parametri di query forniti.

È possibile eseguire una query su una tabella solo se la tabella dispone di una chiave primaria composita (una chiave di partizione e una chiave di ordinamento). Quando si esegue una query, è necessario specificare una chiave di partizione e una condizione che si applichi alla chiave di ordinamento.

Si supponga di disporre di una classe `Reply` lato client mappata alla tabella `Reply` in DynamoDB. L'esempio di codice C\$1 seguente esegue una query sulla tabella`Reply` per ottenere le risposte a un thread del forum pubblicate negli ultimi 15 giorni. La tabella `Reply` ha una chiave primaria che ha la chiave di partizione `Id` e la chiave di ordinamento `ReplyDateTime`.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

string replyId = "DynamoDB#DynamoDB Thread 1"; //Partition key
DateTime twoWeeksAgoDate = DateTime.UtcNow.Subtract(new TimeSpan(14, 0, 0, 0)); // Date to compare.
IEnumerable<Reply> latestReplies = context.Query<Reply>(replyId, QueryOperator.GreaterThan, twoWeeksAgoDate);
```

Restituisce una raccolta di oggetti `Reply`. 

Il metodo `Query` restituisce una raccolta `IEnumerable` a "caricamento differito". Inizialmente restituisce solo una pagina di risultati e in seguito effettua una chiamata di assistenza per la pagina successiva, se necessario. Per ottenere tutti gli elementi corrispondenti, è necessario iterare solo su `IEnumerable`.

Se la tabella ha una chiave primaria semplice (chiave di partizione), non è possibile utilizzare il metodo `Query`. Invece, è possibile utilizzare il metodo `Load` e fornire la chiave di partizione per recuperare l'elemento.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `QueryAsync`.

## Save (Salva)
<a name="w2aac17b9c21c23c39c35"></a>

Salva l'oggetto specificato nella tabella. Se la chiave primaria specificata nell'oggetto di input non esiste nella tabella, il metodo aggiunge un nuovo elemento alla tabella. Se esiste la chiave primaria, il metodo aggiorna l'elemento esistente.

Se è stato configurato il blocco ottimistico, l'aggiornamento avrà esito positivo solo se le versioni lato client e lato server dell'elemento corrispondono. Per ulteriori informazioni, consulta [Blocco ottimistico con DynamoDB e il modello di persistenza degli oggetti AWS SDK per .NET](DynamoDBContext.VersionSupport.md).

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `SaveAsync`.

## Scan
<a name="w2aac17b9c21c23c39c37"></a>

Esegue la scansione dell'intera tabella. 

È possibile filtrare i risultati della scansione specificando una condizione di scansione. La condizione può essere valutata in base a qualsiasi attributo nella tabella. Si supponga di disporre di una classe `Book` lato client mappata alla tabella `ProductCatalog` in DynamoDB. Nell'esempio di C\$1 seguente viene eseguita la scansione della tabella e vengono restituiti solo gli elementi del libro con un prezzo inferiore a 0.

**Example**  

```
IEnumerable<Book> itemsWithWrongPrice = context.Scan<Book>(
                    new ScanCondition("Price", ScanOperator.LessThan, price),
                    new ScanCondition("ProductCategory", ScanOperator.Equal, "Book")
      );
```

Il metodo `Scan` restituisce una raccolta `IEnumerable` a "caricamento differito". Inizialmente restituisce solo una pagina di risultati e in seguito effettua una chiamata di assistenza per la pagina successiva, se necessario. Per ottenere tutti gli elementi corrispondenti, è necessario iterare solo su `IEnumerable`.

Per motivi di prestazioni, è preferibile eseguire query sulle tabelle ed evitare le scansioni.

**Nota**  
Per eseguire questa operazione in background, utilizza invece il metodo `ScanAsync`.

## ToDocument
<a name="w2aac17b9c21c23c39c39"></a>

Restituisce un'istanza della classe del modello di documento `Document` dall'istanza della classe. 

Ciò è utile se si desidera utilizzare le classi del modello di documento insieme al modello di persistenza degli oggetti per eseguire qualsiasi operazione sui dati. Per ulteriori informazioni sulle classi del modello di documento fornite da AWS SDK per .NET, vedere[Utilizzo del modello documentale .NET in DynamoDB](DotNetSDKMidLevel.md). 

Si supponga di disporre di una classe lato client mappata alla tabella `Forum` di esempio. È quindi possibile utilizzare un `DynamoDBContext` per ottenere un elemento come oggetto `Document` dalla tabella `Forum`, come mostrato nell'esempio di codice C\$1 seguente.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

Forum forum101 = context.Load<Forum>(101); // Retrieve a forum by primary key.
Document doc = context.ToDocument<Forum>(forum101);
```

## Specificazione dei parametri opzionali per Dynamo DBContext
<a name="OptionalConfigParams"></a>

Quando si utilizza il modello di persistenza degli oggetti, è possibile specificare i parametri facoltativi che seguono per `DynamoDBContext`.
+ **`ConsistentRead`:** quando si recuperano i dati utilizzando le operazioni `Load`, `Query` o `Scan`, è possibile aggiungere questo parametro facoltativo per richiedere i valori più recenti dei dati.
+ **`IgnoreNullValues`:** questo parametro indica a `DynamoDBContext` di ignorare i valori nulli sugli attributi durante un'operazione `Save`. Se questo parametro è false (o se non è impostato), allora un valore null viene interpretato come una direttiva per eliminare l'attributo specifico. 
+ **`SkipVersionCheck`:** questo parametro indica a `DynamoDBContext` di non confrontare le versioni durante il salvataggio o l'eliminazione di un elemento. Per ulteriori informazioni sulla funzione Controllo delle versioni, consulta [Blocco ottimistico con DynamoDB e il modello di persistenza degli oggetti AWS SDK per .NET](DynamoDBContext.VersionSupport.md).
+ **`TableNamePrefix`:** aggiunge un prefisso a tutti i nomi delle tabelle con una stringa specifica. Se questo parametro è null (o se non è impostato), allora non viene utilizzato alcun prefisso.
+ `DynamoDBEntryConversion`: specifica lo schema di conversione utilizzato dal client. È possibile impostare questo parametro sulla versione V1 o V2. V1 è la versione predefinita.

  In base alla versione impostata, il comportamento di questo parametro cambia. Esempio:
  + In V1, il tipo di dati `bool` viene convertito nel tipo numerico `N`, dove 0 rappresenta false e 1 rappresenta true. In V2, `bool` viene convertito in `BOOL`.
  + Nella V2, gli elenchi e gli array non sono raggruppati con. HashSets Gli elenchi e gli array di valori numerici, tipi basati su stringhe e tipi a base binaria vengono convertiti nel tipo `L` (List, elenco), che può essere inviato vuoto per aggiornare un elenco. Il caso è diverso da V1, in cui un elenco vuoto non viene inviata in rete.

    Nella V1, i tipi di raccolta, come List HashSet, e gli array vengono trattati allo stesso modo. L'elenco e HashSet la matrice di numeri vengono convertiti nel tipo `NS` (set di numeri). 

  L’esempio seguente imposta la versione dello schema di conversione su V2, che modifica il comportamento di conversione tra tipi .NET e tipi di dati DynamoDB.

  ```
  var config = new DynamoDBContextConfig
  {
      Conversion = DynamoDBEntryConversion.V2
  };
  var contextV2 = new DynamoDBContext(client, config);
  ```

L’esempio C\$1 seguente crea un nuovo `DynamoDBContext` specificando due dei parametri facoltativi precedenti, `ConsistentRead` e `SkipVersionCheck`.

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context =
       new DynamoDBContext(client, new DynamoDBContextConfig { ConsistentRead = true, SkipVersionCheck = true});
```

`DynamoDBContext` include questi parametri facoltativi con ogni richiesta inviata utilizzando questo contesto. 

Invece di impostare questi parametri al livello `DynamoDBContext`, è possibile specificarli per le singole operazioni eseguite utilizzando `DynamoDBContext`, come mostrato nell'esempio di codice C\$1 seguente. L'esempio carica un elemento del libro specifico. Il metodo `Load` di `DynamoDBContext` specifica i parametri facoltativi `ConsistentRead` e `SkipVersionCheck`.

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context = new DynamoDBContext(client);
Book bookItem = context.Load<Book>(productId,new DynamoDBContextConfig{ ConsistentRead = true, SkipVersionCheck = true });
```

In questo caso, `DynamoDBContext` include questi parametri solo quando si invia la richiesta `Get`.