

# Uso del modelo de persistencia de objetos de .NET y DynamoDB
<a name="DotNetSDKHighLevel"></a>

El AWS SDK para .NET proporciona un modelo de persistencia de objetos que le permite mapear las clases en el cliente a una tabla de Amazon DynamoDB. A continuación, cada instancia de objeto se mapea a un elemento en las tablas correspondientes. Para guardar los objetos del lado del cliente en las tablas, el modelo de persistencia de objetos proporciona la clase `DynamoDBContext`, un punto de entrada a DynamoDB. Esta categoría le ofrece una conexión a DynamoDB y le permite obtener acceso a tablas, realizar diversas operaciones CRUD y ejecutar consultas.

El modelo de persistencia de objetos proporciona un conjunto de atributos para mapear las clases del lado del cliente a tablas, y las propiedades/campos a atributos de tabla.

**nota**  
El modelo de persistencia de objetos no proporciona una API para crear, actualizar o eliminar tablas. Solo ofrece operaciones de datos. Puede usar la API de bajo nivel AWS SDK para .NET para crear, actualizar y eliminar tablas.

En el ejemplo siguiente se muestra cómo funciona el modelo de persistencia de objetos. Comienza con la tabla `ProductCatalog`. Su clave principal es `Id`.

```
ProductCatalog(Id, ...)
```

Suponga que tiene una clase `Book` con las propiedades `Title`, `ISBN` y `Authors`. Puede mapear la clase `Book` a la tabla `ProductCatalog` agregando los atributos definidos por el modelo de persistencia de objetos, como se muestra en el siguiente ejemplo de código C\$1.

**Example**  

```
[DynamoDBTable("ProductCatalog")]
  public class Book
  {
    [DynamoDBHashKey]
    public int Id { get; set; }

    public string Title { get; set; }
    public int ISBN { get; set; }

    [DynamoDBProperty("Authors")]
    public List<string> BookAuthors { get; set; }

    [DynamoDBIgnore]
    public string CoverPage { get; set; }
  }
```

En el ejemplo anterior, el atributo `DynamoDBTable` mapea la clase `Book` a la tabla `ProductCatalog`.

El modelo de persistencia de objetos admite el mapeo tanto explícito como predeterminado entre las propiedades de clase y los atributos de tabla.
+ **Mapeo explícito**: para mapear una propiedad a una clave principal, debe usar los atributos `DynamoDBHashKey` y `DynamoDBRangeKey` del modelo de persistencia de objetos. Además, en el caso de los atributos sin clave principal, si un nombre de propiedad de la clase y el atributo de tabla correspondiente al que desea mapearlo no son iguales, debe definir el mapeo agregando explícitamente el atributo `DynamoDBProperty`.

  En el ejemplo anterior, la propiedad `Id` se mapea a la clave principal con el mismo nombre y la propiedad `BookAuthors` se mapea al atributo `Authors` de la tabla `ProductCatalog`.
+ **Mapeo predeterminado**: de forma predeterminada, el modelo de persistencia de objetos mapea las propiedades de clase a los atributos con el mismo nombre de la tabla.

  En el ejemplo anterior, las propiedades `Title` e `ISBN` se mapean a los atributos del mismo nombre de la tabla `ProductCatalog`.

No tiene que mapear cada propiedad de clase. Puede identificar estas propiedades agregando el atributo `DynamoDBIgnore`. Al guardar una instancia de `Book` en la tabla, `DynamoDBContext` no incluye la propiedad `CoverPage`. Tampoco se devolverá esta propiedad cuando se recupere la instancia del libro.

Puede mapear propiedades de tipos primitivos de .NET, como int o string. También puede mapear cualquier tipo de datos arbitrarios, siempre y cuando proporcione un convertidor adecuado para mapear los datos arbitrarios a uno de los tipos de DynamoDB. Para obtener más información sobre cómo mapear tipos arbitrarios, consulte [Mapeo de datos arbitrarios con DynamoDB mediante el modelo de persistencia de objetos de AWS SDK para .NET](DynamoDBContext.ArbitraryDataMapping.md).

El modelo de persistencia de objetos admite el bloqueo optimista. Durante una operación de actualización, esto garantiza que se disponga de la última copia del elemento que se va a actualizar. Para obtener más información, consulte [Bloqueo positivo mediante DynamoDB y el modelo de persistencia de objetos de AWS SDK para .NET](DynamoDBContext.VersionSupport.md).

Para obtener más información, consulte los siguientes temas.

**Topics**
+ [Tipos de datos compatibles](#DotNetDynamoDBContext.SupportedTypes)
+ [Atributos de DynamoDB del modelo de persistencia de objetos de .NET](DeclarativeTagsList.md)
+ [Clase DynamoDBContext del modelo de persistencia de objetos de .NET](DotNetDynamoDBContext.md)
+ [Bloqueo positivo mediante DynamoDB y el modelo de persistencia de objetos de AWS SDK para .NET](DynamoDBContext.VersionSupport.md)
+ [Mapeo de datos arbitrarios con DynamoDB mediante el modelo de persistencia de objetos de AWS SDK para .NET](DynamoDBContext.ArbitraryDataMapping.md)

## Tipos de datos compatibles
<a name="DotNetDynamoDBContext.SupportedTypes"></a>

El modelo de persistencia de objetos admite un conjunto de tipos de datos, colecciones y tipos de datos arbitrarios de .NET primitivos. El modelo admite los siguientes tipos de datos primitivos. 
+ `bool`
+ `byte` 
+ `char`
+ `DateTime`
+ `decimal`
+ `double`
+ `float`
+ `Int16`
+ `Int32`
+ `Int64`
+ `SByte`
+ `string`
+ `UInt16`
+ `UInt32`
+ `UInt64`

El modelo de persistencia de objetos también admite los tipos de colección de .NET. `DynamoDBContext` puede convertir tipos de colección concretos y objetos CLR estándar (POCO, por sus siglas en inglés) simples.

En la tabla siguiente se resume el mapeo de los tipos de .NET anteriores a los tipos de DynamoDB.


****  

| Tipo de .NET primitivo | Tipo DynamoDB | 
| --- | --- | 
|  Todos los tipos de números  |  `N` (tipo Number)  | 
|  Todos los tipos de cadenas  |  `S` (tipo String)   | 
|  MemoryStream, byte[]  |  `B` (tipo Binary)   | 
| bool | N (tipo Number), 0 representa false (falso) y 1 representa true (verdadero). | 
| Tipos de colección | BS (tipo Binary Set), SS (tipo String Set) y NS (tipo Number Set) | 
| DateTime | S (tipo String). Los valores DateTime se almacenan como cadenas con formato ISO-8601. | 

El modelo de persistencia de objetos también admite los tipos de datos arbitrarios. Sin embargo, debe proporcionar el código de convertidor para mapear los tipos complejos a los tipos de DynamoDB.

**nota**  
Se admiten valores binarios vacíos.
Se admite la lectura de valores de cadena vacíos. Los valores de atributo de cadena vacíos se admiten dentro de los valores de atributo del tipo de conjunto de cadenas mientras se escribe en DynamoDB. Los valores de atributo de cadena vacíos del tipo de cadena y los valores de cadena vacíos contenidos en el tipo lista o mapa se eliminan de las solicitudes de escritura