Regra de Negócio - EF -
Mais uma dúvida com relação ao Entity Framework com relação a utilização da camada de regra de negócio.
Tenho uma entidade no modelo com a seguinte estrutura Pais (Id int, Codigo int, Descricao varchar(60))
PK_Pais (Id) - primary key.
Bom minha dúvida é a seguinte: quero validar na minha classe PARTIAL do campo Codigo dessa entidade para que o sistema não permita que um mesmo código seja informado para dois paises. Lembrando que no banco de dados eu já tenho essa validação por um unique index. Veja o código que implementei na minha camada de regra de negócio:
public partial class Pais
{
partial void OnCodigoChanging(string value)
{
if (value == "")
throw new ApplicationException("Codigo nao informado!");
ModeloModel.ModeloModelContainer db = new ModeloModel.ModeloModelContainer();
if ((from p in db.PaisSet
where p.Codigo == value
select p).Count() != 0)
throw new ApplicationException("Codigo já cadastrado para outro país!");
}
}
Veja que para inclusão esse codigo funciona perfeitamente, mas no caso de uma edição de registro esse codigo tem um problema porque essa sentença irá trazer o próprio registro entao gostaria de acrescentar uma condicao para que nao traga o Id do pais que estou editando como faço isso??? Seria algo assim:
(from p in db.PaisSet
where p.Codigo == value && p.IdPaciente != (o que eu colocaria aqui?)
select p).Count()
Aguardo uma resposta
Julio
Lifesys Informática
Nefrodata Ltda
Curtidas 0
Respostas
Fabio Mans
23/01/2009
Julia boa tarde, não entendi, por que você não quer trazer o ID, você precisa dele para fazer o UPDATE.
Você pode explicar melhor?
Obrigado.
GOSTEI 0
Fabio Mans
23/01/2009
Conseguiu resolver, posso fechar o chamado?
GOSTEI 0
Nefrodata Ltda
23/01/2009
Fabio vou tentar te explicar melhor. Estou implementando um codigo para um evento da minha classe Pais que esta no meu EDM. Naquele evento eu tenho acesso ao valor que esta sendo inserido no atributo da classe porém eu precisava acessar outros valores da classe, como eu faço para acessar outros atributos da classe vou te dar um exemplo:
public partial class Pais
{
partial void OnCodigoChanging(string value)
{
// nesse ponto eu tenho acesso ao value que é o valor que esta sendo inserido no atributo
// codigo da minha classe Pais
if (value == "")
throw new ApplicationException("Codigo não informado");
// porem agora eu gostaria de ter acesso ao atributo descricao da minha classe Pais
// isso funcionaria?
if (this.Descricao == "")
throw new ApplicationException("Descricao não informada");
}
}
Isso é possivel? Porque eu tentei implementar um codigo como o abaixo e deu erro:
public partial class Pais
{
public void Insert()
{
ModeloModel.ModeloContainer db = new ModeloModel.ModeloContainer();
db.AddToPais(this); // deu erro nessa linha, imaginei que fosse por estar usando o this
db.SaveChanges();
}
}
Julio
Nefrodata Sistemas
GOSTEI 0
Fabio Mans
23/01/2009
Acessar o atributo funciona sim com certeza, e do jeito que você fez está correto.. mas o insert está errado...
Você deve passar uma classe do tipo Pais como parâmetro com os atributos/propriedades
preenchidos..
Você não pode incluir a mesma classe que está trabalhando..
Isso dá erro mesmo..
Ou você passa uma instância da classe Pais ou passa os atributos um por um.
Qual a mensagem de erro?
Você deve passar uma classe do tipo Pais como parâmetro com os atributos/propriedades
preenchidos..
Você não pode incluir a mesma classe que está trabalhando..
Isso dá erro mesmo..
Ou você passa uma instância da classe Pais ou passa os atributos um por um.
Qual a mensagem de erro?
GOSTEI 0
Nefrodata Ltda
23/01/2009
OK Fabio consegui entender!
Obrigado
Julio
Nefrodata Sistemas
GOSTEI 0