A instalação pode ser feito pelo Package Manager Console
PM> Install-Package CanducciDocumentDB
ou então Nuget
Configure a classe ConnectionDocumentDB
que tem um construtor com três paramentros:
- url
- key
- database
string url = "https://localhost:8081/";
string key = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
string database = "database";
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
Apos configurar a classe, precisamos criar uma classe que represente o modelo da coleção e sua respectiva classe respository
.
public class Credit
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "description")]
[Required(ErrorMessage = "Digite a descrição ...")]
public string Description { get; set; }
}
Observação: a classe Credit
foi decorada com JsonProperty
atributo que vem do pacote Newtonsoft.Json,
item já instalado quando é instalado esse pacote Canducci DocumentDB
A classe abstract
RepositoryCreditAbstract
que herda de Repository
e IRepository
como contrato, tem um construtor com a classe ConnectionDocumentDB db
e é chamado a sua base para a passagem da variável db
e o nome da coleção que no caso é credit
.
public abstract class RepositoryCreditAbstract: Repository<Credit>, IRepository<Credit>
{
public RepositoryCreditAbstract(ConnectionDocumentDB db)
: base(db, "credit")
{
}
}
A classe concret
RepositoryCredit
herda de RepositoryCreditAbstract
e também possui um construtor
com a classe ConnectionDocumentDB db
e chama a sua base para a passagem da variável db
, não precisando passar o segundo parametro ato feito na classe abstract
RepositoryCreditAbstract
.
public class RepositoryCredit: RepositoryCreditAbstract
{
public RepositoryCredit(ConnectionDocumentDB db)
: base(db)
{
}
}
Com a codificação dessas classes, permite a gravação dessa coleção configurada (vale lembrar que a criação do DatabaseId
e CollectionId
e manual, então, entre no Azure e configure essas duas informações), onde a estrutura possui os seguintes métodos:
- Inserir coleção
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);
Credit credit = new Credit { Description = "Matemática" };
credit = await rep.InsertAsync(credit);
- Atualizar coleção
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);
Credit credit = await rep.FindAsync("d70e21fd-b9e3-430b-a934-778ce3a871b3");
credit.Description = "História";
await rep.UpdateAsync(credit);
- Excluir uma coleção
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);
await rep.DeleteAsync("d70e21fd-b9e3-430b-a934-778ce3a871b3");
- Trazer uma coleção pelo
Id
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);
Credit credit = await rep.FindAsync("d70e21fd-b9e3-430b-a934-778ce3a871b3");
- Trazer todos as coleções
ConnectionDocumentDB db = new ConnectionDocumentDB(url, key, database);
RepositoryCreditAbstract rep = new RepositoryCredit(db);
IEnumerable<Credit> creditList = await rep.AllAsync();
Para configurar um aplicação Web
, é utilizado o Ninject.MVC5, que ao final da instalação do seu pacote terá um classe a ser configurada na pasta App_Start
no arquivo NinjectWebCommon.cs
.
No método void RegisterServices(IKernel kernel)
faça:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ConnectionDocumentDB>()
.ToSelf()
.WithConstructorArgument("url", ConfigurationManager.AppSettings["url"])
.WithConstructorArgument("key", ConfigurationManager.AppSettings["key"])
.WithConstructorArgument("database", ConfigurationManager.AppSettings["database"]);
kernel.Bind<RepositoryCarAbstract>().To<RepositoryCar>();
kernel.Bind<RepositoryCreditAbstract>().To<RepositoryCredit>();
}
Observação: foi configurado dentro do Web.config
na chave appSettings
as configurações de conexão, segue abaixo:
<appSettings>
...
<add key="url" value="https://localhost:8081/"/>
<add key="key" value="C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="/>
<add key="database" value="Todo"/>
</appSettings>
Feito isso a sua aplicação Web
está preparada para receber Injeção de Dependencia, como por exemplo esse controller
:
public class CreditsController : Controller
{
protected RepositoryCreditAbstract Repository { get; private set; }
public CreditsController(RepositoryCreditAbstract repository)
{
Repository = repository;
}
public async Task<ActionResult> Index(int? page)
{
return View(await Repository.AllAsync());
}
public async Task<ActionResult> Details(string id)
{
return View(await Repository.FindAsync(id));
}
public ActionResult Create()
{
return View();
}
[HttpPost]
public async Task<ActionResult> Create(Credit credit)
{
try
{
credit = await Repository.InsertAsync(credit);
if (string.IsNullOrEmpty(credit.Id))
return RedirectToAction("Index");
return RedirectToAction("Edit", new { id = credit.Id });
}
catch
{
return View();
}
}
public async Task<ActionResult> Edit(string id)
{
return View(await Repository.FindAsync(id));
}
[HttpPost]
public async Task<ActionResult> Edit(string id, Credit credit)
{
try
{
await Repository.UpdateAsync(credit, id);
return RedirectToAction("Edit", new { id = credit.Id });
}
catch
{
return View();
}
}
public async Task<ActionResult> Delete(string id)
{
return View(await Repository.FindAsync(id));
}
[HttpPost]
public async Task<ActionResult> Delete(string id, Credit credit)
{
try
{
await Repository.DeleteAsync(id);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
A partir desse ponto gere todas as Views
respectivas de cada método, onde o mesmo possibilitará as operações de CRUD
para essa coleção.
Um exemplo de um registro gravado dessa coleção:
{
"id": "d70e21fd-b9e3-430b-a934-778ce3a871b3",
"title": "LINGUA PORTUGUESA",
"value": 200,
"created": "2015-02-28T00:00:00",
"active": true,
"_rid": "aFh5AITdaQABAAAAAAAAAA==",
"_self": "dbs/aFh5AA==/colls/aFh5AITdaQA=/docs/aFh5AITdaQABAAAAAAAAAA==/",
"_etag": "\"00001400-0000-0000-0000-58ab120e0000\"",
"_attachments": "attachments/",
"_ts": 1487606286
}