Persistir relacionamentos utilizando o Paulovich.Data é simples. Vejamos um exemplo ainda mais simples: Cidades pertencentes à Estados.

Temos estas duas tabelas

Que nos permitem gerar estas duas classes:

Classe State.cs

using System;
using System.Collections.Generic;
using Paulovich.Data;
using System.Collections.ObjectModel;

namespace Paulovich.Business{

[Table("States")]
public class State: Persist {

#region fields & properties

[PrimaryKeyField(IsIdentity=true)]
public int StateId { get; set; }

Field
public string Name { get; set; }

#endregion

#region constructors

public State ()
: base() {
}

public State (params object[] keys)
: base(keys) {
}

#endregion

#region related tables

ListToSave
public Collection<Cities> Cities{ get; set; }

#endregion

}

}

Classe City.cs

using System;
using System.Collections.Generic;
using Paulovich.Data;
using System.Collections.ObjectModel;namespace Paulovich.Business{

[Table("Cities")]
public class City: Persist
{

#region fields & properties

[PrimaryKeyField(IsIdentity=true)]
public int CityId { get; set; }

Field(typeof(State), "StateId")
public int StateId { get; set; }

Field
public string Name { get; set; }

#endregion

#region constructors

public City ()
: base()
{ }

public City (params object[] keys)
: base(keys)
{ }

#endregion

}
}

Perceba que na classe State.cs uma das propriedades é uma coleção de objetos City, chamada Cities. É desta forma que a "classe dominante" manipula os objetos filhos.

Salvar

// construa o objeto estado

State state = new State();
state.Name = "Minas Gerais";

// construa os objetos cidades

City city1 = new City();
city1.Name = "Belo Horizonte";

City city2 = new City();
city2.Name = "Ouro Preto";

// adicione as cidades ao estado

state.Cities.Add(city1);
state.Cities.Add(city2);

// execute o método Save() do objeto State passando o "depth" (profundidade)

state.Save(1);

Este parâmetro depth, representa o número de níveis de parentesco que será salvo. Ou seja, se você não informar um "depth" maior que 0 (zero) apenas o objeto pai será persistido no banco de dados. Neste caso, queremos salvar também os objetos filhos que foram adicionados, por isso passamos o "depth" 1 (um), salvando assim o primeiro nível de parentesco, ou seja, os filhos.

Carregar

Para carregar novamente os objetos, nós também usamos o depth, para definir quais níveis de parentesco serão carregados a partir do banco de dados.

// construa o objeto estado passando o Id para posicionar o objeto

State state = new State(1);

Console.WriteLine(state.Cities.Count); // 0

state.Get(1);

Console.WriteLine(state.Cities.Count); // 2

Repare que somente após o Get(depth) que podemos acessar os objetos filhos. Antes disso somente o objeto pai estava pronto.

Last edited Mar 9, 2010 at 1:37 PM by ivanpaulovich, version 1

Comments

No comments yet.