# 7.1.1 Creando el modelo Clientes

Para este servicio vamos a crear nuestro modelo para registrar a los **Clientes.** Agregamos nuestra clase **Cliente**.cs en nuestra carpeta Model

{% code title="Cliente.cs" %}

```csharp
/// <summary>
/// Guarda los clientes
/// </summary>
public class Cliente
{
	/// <summary>
	/// Id del cliente
	/// </summary>
	[Key]
	[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
	public int Id { get; set; }

	/// <summary>
	/// Clave del cliente
	/// </summary>
	[Required(ErrorMessage = "Required")]
	[Range(1, 999999, ErrorMessage = "Range")]
	public int Clave { get; set; }

	/// <summary>
	/// RFC del cliente
	/// </summary>
	[Column(TypeName = "VARCHAR(15)")]
	public string RFC { get; set; }

	/// <summary>
	/// Razón social del cliente 
	/// como esta registrado ante hacienda
	/// </summary>
	[Required(ErrorMessage = "Required")]
	[Column(TypeName = "VARCHAR(250)")]
	public string  RazonSocial { get; set; }
	
	/// <summary>
	/// Nombre comercial del cliente
	/// </summary>
	[Required(ErrorMessage = "Required")]
	[Column(TypeName = "VARCHAR(250)")]
	public string NombreComercial { get; set; }

	/// <summary>
	/// Dirección del cliente
	/// </summary>
	[Required(ErrorMessage = "Required")]
	[Column(TypeName = "VARCHAR(200)")]
	public string Direccion { get; set; }

	/// <summary>
	/// Email de contacto
	/// </summary>
	[Column(TypeName = "VARCHAR(150)")]
	public string Email { get; set; }

	/// <summary>
	/// Teléfono Fijo del cliente
	/// </summary>
	[Column(TypeName = "VARCHAR(20)")]
	public string Telefono { get; set; }

	/// <summary>
	/// Número de celular del cliente
	/// </summary>
	[Column(TypeName = "VARCHAR(20)")]
	public string Celular { get; set; }

	/// <summary>
	/// Sitio Web del cliente
	/// </summary>
	[Column(TypeName = "VARCHAR(20)")]
	public string SitioWeb { get; set; }

	/// <summary>
	/// Indica si el cliente esta activo
	/// </summary>
	[Required(ErrorMessage = "Required")]
	public bool Activo { get; set; }
}
```

{% endcode %}

Agregamos la tabla **Cliente** en nuestra clase **CaducaContext**

{% code title="CaducaContext.cs" %}

```csharp
public class CaducaContext : DbContext
{
    public virtual DbSet<Cliente> Cliente { get; set; }
}
```

{% endcode %}

Agregamos la migración con el nombre Clientes

```
Add-Migration Clientes
```

Actualizamos la base de datos

```
Update-database
```

Si deseas seguir practicando las reglas personalizadas, puedes agregar una regla llamada RequiredWithField en el cual puedes agregar una regla para validar:

Si un campo no esta vacío otro campo es obligatorio como por ejemplo si el cliente tiene RFC, la razón social es obligatoria

Puedes ver la regla terminada en mi github. Su utilización sería así:

```
[RequiredWithField("RazonSocial")]
public string RFC { get; set; }
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://abi.gitbook.io/net-core/6.2-configurar-tus-servicios-con-odata/6.2.1-creando-el-modelo-clientes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
