Usuário com melhor resposta
Relacionamento entre 2 Bases com o EF + CodeFirst

Pergunta
-
Pessoal, bom dia!
Estou com uma grande dificuldade. Já procurei em diversos lugares e não encontrei uma solução.
Eu tenho um projeto que deve conectar com 2 bases. Não sei como que eu faço para relacionar as tabelas de bases distintas no CodeFirst. Exemplo:
Base: Corporativo
Tabela: Cargo
Colunas: CargoId, DescricaoBase: Sistema
Tabela: Pessoa
Coluna: PessoaId, Nome, CargoID(Essa coluna, deve comunicar com a tabela "Cargo" da base "Corporativo")Como deve funcionar a relação entre os Modelos e os Contexto.
No aguardo e muito obrigado.
Respostas
-
Na verdade Thauan, são contextos/bases diferentes. Vc não consegue estabelecer uma relação direta entre eles, então a consistência deste tipo de coisa e mesmo consulta juntando as duas bases fica a cargo da sua aplicação.
Uma alternativa seria vc criar uma Views em um banco, por exemplo, de forma a apontar para os dados que estão na outra base. Com isso vc conseguiria fazer essa "amarração".
- Sugerido como Resposta JAlvez42 segunda-feira, 26 de outubro de 2015 12:30
- Marcado como Resposta Thauan Ricardo segunda-feira, 26 de outubro de 2015 17:12
Todas as Respostas
-
Na verdade Thauan, são contextos/bases diferentes. Vc não consegue estabelecer uma relação direta entre eles, então a consistência deste tipo de coisa e mesmo consulta juntando as duas bases fica a cargo da sua aplicação.
Uma alternativa seria vc criar uma Views em um banco, por exemplo, de forma a apontar para os dados que estão na outra base. Com isso vc conseguiria fazer essa "amarração".
- Sugerido como Resposta JAlvez42 segunda-feira, 26 de outubro de 2015 12:30
- Marcado como Resposta Thauan Ricardo segunda-feira, 26 de outubro de 2015 17:12
-
Renato, muito obrigado.
Então, sempre nesse caso, devemos sempre utilizar Views??
Como faço pra fazer alteração, inserção no caso em outra base?
No meu projeto devo criar 2 context,um pra cada base e assim fazer a alteração em cada uma delas?
Como eu exibo a view em um Modelo para trabalhar no projeto?
Desculpe, estou a procura faz tempo de uma solução.
-
-
Renato,
Fiz algo muito simples, sem implementar o UnitOfWork.Resolvi da seguinte maneira:
Criei 2 Context:
CorporativoContext:
namespace WebApplication1.Context { public class CorporativoContext : DbContext { public DbSet<Cargo> Cargos { get; set; } public CorporativoContext() : base("CorporativoConnectionString") { } } }
ThauanContext:
public class ThauanContext : DbContext { public DbSet<Pessoa> Pessoas { get; set; } public DbSet<vwtPessoa> vwtPessoa { get; set; } public ThauanContext() : base("ThauanConnectionString") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<vwtPessoa>().ToTable("vwtPessoa"); base.OnModelCreating(modelBuilder); } }
Meus Modelos:
Models/Views/vwtPessoa.cs:
public class vwtPessoa { [Key] public int PESS_CD_ID { get; set; } public string PESS_NM_COMPLETO { get; set; } public int CARG_CD_ID { get; set; } public string CARG_DS_COMPLETO { get; set; } }
Models/Cargo.cs:
[Table("TB_CARGO")] public class Cargo { [Column("CARG_CD_ID")] public int CargoId { get; set; } [Column("CARG_DS_COMPLETO")] public string Descricao { get; set; } }
Models/Pessoa.cs:
[Table("TB_PESSOA")] public class Pessoa { [Column("PESS_CD_ID")] public int PessoaId { get; set; } [Column("PESS_NM_COMPLETO")] public string NomeCompleto { get; set; } [Column("CARG_CD_ID")] public int CargoId { get; set; } }
PessoaController:
public class PessoaController : Controller { // // GET: /Pessoa/ public ActionResult Index() { using (var thauanContext = new ThauanContext()) { IEnumerable<vwtPessoa> ltsPessoa = thauanContext.vwtPessoa.ToList().Take(5); return View(ltsPessoa); } } // // GET: /Pessoa/Cadastrar public ActionResult Cadastrar() { using (var corporativoContext = new CorporativoContext()) { ViewBag.Cargos = new SelectList(corporativoContext.Cargos.ToList(), "CargoId", "Descricao"); } return View(); } // // POST: /Pessoa/Cadastrar [HttpPost] public ActionResult Cadastrar(Pessoa cPessoa) { if (ModelState.IsValid) { using (var thauanContext = new ThauanContext()) { thauanContext.Pessoas.Add(cPessoa); thauanContext.SaveChanges(); return RedirectToAction("Index"); } } using (var corporativoContext = new CorporativoContext()) { ViewBag.Cargos = new SelectList(corporativoContext.Cargos.ToList(), "CargoId", "Descricao"); } return View(cPessoa); } // // GET: /Pessoa/Editar public ActionResult Editar(int? Id) { if (Id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } using (var context = new ThauanContext()) { var cPessoa = context.Pessoas.Find(Id); if (cPessoa == null) { return HttpNotFound(); } } return View(); } }
Resolvi postar o que eu fiz, para ajudar as pessoas que possuem dúvida.
O que você acha dessa solução?Se possível, tem a possibilidade de você compartilhar algo relacionado a essa ideia de implementação com procedures e referenciar como métodos da entidade para ter uma noção?
Provavelmente, muitas pessoas devem ter essa mesma dúvida, relacionamento entre as tabelas de Bases.
Agradeço. Muito obrigado!
-