private static Relacionamento CriarLigacaoEntreModels(PropertyInfo propriedade, PropertyInfo propriedadeReferenciada) { var tipoPropriedade = propriedade.PropertyType; if (!propriedade.GetGetMethod().IsVirtual) { return(null); } var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(propriedadeReferenciada); if (!string.IsNullOrEmpty(chaveEstrangeira)) { return(CriarLigacaoAscendenteEntreModels(propriedadeReferenciada, chaveEstrangeira)); } if (typeof(IEntidade).IsAssignableFrom(tipoPropriedade)) { GerarErroDeLigacao(propriedade); } var inverse = DataAnnotationHelper.ConsultarForeignKeyDaInverseProperty(propriedadeReferenciada, tipoPropriedade); if (!string.IsNullOrEmpty(inverse)) { return(GerarScriptCarregamentoDescendente(propriedadeReferenciada, inverse, tipoPropriedade)); } if ((tipoPropriedade.IsGenericType) && (tipoPropriedade.GetGenericTypeDefinition() == typeof(ICollection <>))) { GerarErroDeLigacao(propriedade); } return(null); }
public void SeCriarScriptConsultaRelacionamentoDescendenteDeveGerarUmScriptSqlCorretamente() { var queryBuilder = new QueryBuilder(); var dicionarioPai = new Dicionario(typeof(ObjetoDeTestes)); queryBuilder.DefinirTabela(dicionarioPai.Nome); queryBuilder.AdicionarCondicao("Codigo", (int)Operadores.Igual, 1); var scriptConsultaDoPai = queryBuilder.GerarScript(dicionarioPai); var dicionarioFilho = new Dicionario(typeof(FilhoDoObjetoDeTestes)); var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionarioFilho.ConsultarPorCampo("Pai").Propriedade); var relacionamentoBuilder = new RelacionamentoBuilder(); var relacionamento = new Relacionamento(TiposRelacionamento.Descendente, dicionarioFilho, chaveEstrangeira); relacionamentoBuilder.CriarScriptConsultaRelacionamentoDescendente(relacionamento, scriptConsultaDoPai, dicionarioPai.ConsultarCamposChave()) .Should() .Be("with[d]as(" + "select[Codigo],[CodigoNulo],[Nome],[Duplo],[DuploNulo],[Decimal]," + "[DecimalNulo],[Logico],[DataHora],[DataHoraNulo] " + "from[ObjetoVirtual]" + "where([Codigo]=@_p0) " + ")" + "select[CodigoFilho],[NomeFilho],[CodigoPai]" + "from[ObjetoVirtualFilho][t]" + "where(exists(" + "select top 1 1 " + "from[d]" + "where(t.[CodigoPai]=d.[Codigo])))"); }
public void SeConsultarAForeingKeyDaPropriedadeFilhosDeveRetornarNull() { var propriedade = typeof(ObjetoDeTestes).GetProperty("Filhos"); DataAnnotationHelper.ConsultarForeignKey(propriedade) .Should().BeNull(); }
public void SeConsultarAForeingKeyDaPropriedadPaiDeveRetornarCodigoPai() { var propriedade = typeof(FilhoDoObjetoDeTestes).GetProperty("Pai"); DataAnnotationHelper.ConsultarForeignKey(propriedade) .Should().Be("IdPai"); }
public void SeQuestionarPelaPropriedadeRelacinoadaDeUmObjetoQueNaoPossuiUmaDeterminadaChaveDeveRetornarFalso() { var filho = new FilhoDoObjetoDeTestes(); var dicionario = new Dicionario(typeof(FilhoDoObjetoDeTestes)); var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionario.ConsultarPorCampo("Pai").Propriedade); var relacionamento = new Relacionamento(TiposRelacionamento.Ascendente, dicionario, chaveEstrangeira); relacionamento.PossuiChaveAscendente(new object[] { 123 }, filho) .Should().BeFalse(); }
public void SeDefinirUmaChaveAscendenteDeUmCampoRelacionadoDevePreencherObjetoCorretamente() { var filho = new FilhoDoObjetoDeTestes(); var dicionario = new Dicionario(typeof(FilhoDoObjetoDeTestes)); var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionario.ConsultarPorCampo("Pai").Propriedade); var relacionamento = new Relacionamento(TiposRelacionamento.Ascendente, dicionario, chaveEstrangeira); relacionamento.AplicarChaveAscendente(new object[] { 123 }, filho); filho.CodigoPai .Should().Be(123); }
public void SeQuestionarPelaPropriedadeRelacionadaComDeterminadoValorPreenchidoDeveRetornarVerdadeiro() { var filho = new FilhoDoObjetoDeTestes() { CodigoPai = 123 }; var dicionario = new Dicionario(typeof(FilhoDoObjetoDeTestes)); var chaveEstrangeira = DataAnnotationHelper.ConsultarForeignKey(dicionario.ConsultarPorCampo("Pai").Propriedade); var relacionamento = new Relacionamento(TiposRelacionamento.Ascendente, dicionario, chaveEstrangeira); relacionamento.PossuiChaveAscendente(new object[] { 123 }, filho) .Should().BeTrue(); }