2012-05-01 2 views
0

J'écris une application basée sur le framework Pro Asp .Net MVC de Steve Sanderson, qui utilise une modélisation de données comme décrit dans l'application Sports Store de ce livre. Mon application fonctionne bien, j'utilise le projet Castle comme CIO mais j'ai deux bases de données. Le premier stocke beaucoup de types de données et de l'information de mes clients. Le second stocke uniquement les données médicales de chaque client. Je dois créer une classe qui renvoie les données dans le tableau des clients, situé sur la base de données 1 et des informations médicales de chaque client stockées sur la base de données 2.MVC Multiple Databases dans un seul modèle de domaine

Voici mon code:

Mes connectionStrings sur web.config:

<add name="CNRConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=CNR;Persist Security Info=True;User ID=sa;[email protected]#@@@!" providerName="System.Data.SqlClient"/> 

<add name="CNRpeConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=pe;Persist Security Info=True;User ID=sa;[email protected]#@@@!" providerName="System.Data.SqlClient"/> 

ma nouvelle classe (juste des données, aucune table conection):

namespace DomainModel.Entities 
{ 
    public class ImprimePeriodoPaciente 
    { 
     public int CodConsulta { get; set; } 
     public DateTime DataConsulta { get; set; } 
     public string Evolucao { get; set; } 
     public int CodProfissional1 { get; set; } 
     public int CodPaciente1 { get; set; } 
     public string NomeProfissional { get; set; } //receives data from other db 
     public string NomePaciente { get; set; } //receives data from other db 
     public int CodProcedimento { get; set; } 
     public bool TagConsulta { get; set; } 
     public int? TagConsulta2 { get; set; } 
     public DateTime di { get; set; } 
     public DateTime df { get; set; } 
    } 
} 

Ceci est mon béton et de l'interface de domainmodel:

public class SqlConsultasRepository:IConsultasRepository 
    { 
    private Table<Consulta> consultasTabela; 
    private Table<TEvolucao> tEvolucaoTabela; 
    private Table<Paciente> pacientesTabela; 
    private Table<Funcionario> funcionariosTabela; 

    public SqlConsultasRepository(string connectionString) 
    { 
     consultasTabela = (new DataContext(connectionString)).GetTable<Consulta>(); 
     tEvolucaoTabela = (new DataContext(connectionString)).GetTable<TEvolucao>(); 
     pacientesTabela = (new DataContext(connectionString)).GetTable<Paciente>(); 
     funcionariosTabela = (new DataContext(connectionString)).GetTable<Funcionario>(); 
    } 


     public IQueryable<ImprimePeriodoPaciente> Prontuarios   { 
      get 
      { 
       return 
        (
         from c in consultasTabela 
         join p in pacientesTabela on c.CodPaciente1 equals p.CodigoPaciente //my doom 
         join f in funcionariosTabela on c.CodProfissional1 equals f.CodigoFuncionario //my doom 
         select new ImprimePeriodoPaciente 
         { 
          CodConsulta=c.CodConsulta, 
          DataConsulta=c.DataConsulta, 
          Evolucao=c.Evolucao, 
          NomeProfissional= f.NomeFuncionario, //my doom 
          NomePaciente=p.NomePaciente, //my doom 
          CodProfissional1=c.CodProfissional1, 
          CodPaciente1 = c.CodPaciente1 
         } 
        ); 
      } 

     } 

Le code est marqué par mon malheur »pour montrer où le problème se produit .... Je dois créer une référence connectionString à l'autre base de données car ces tables ne sont pas dans la base de données actuelle spécifiée par la variable connectionString. Je reçois une erreur disant que les données ne proviennent pas du même datacontext (ou quelque chose comme ça).

Alors, pourriez-vous m'aider?

+0

J'ai lu Pro Asp.Net MVC 3 et je recommande de détourner l'exemple de l'application Sports Store. C'est le code le plus fou, pathologiquement exagéré et irréaliste que j'ai jamais vu dans ma vie. Steve Sanderson écrit des cadres et des livres, mais ce ne sont pas des applications de la vie réelle et quand tous les exemples ne collent pas, ce n'est pas une grosse affaire. –

+0

Eh bien, je sais que son mode de vie semble dur, mais je ne pense pas que je n'ai pas le temps de reingeneer mon application, parce que je n'ai pas cette fois ... Tnx pour vos conseils .... les prochaines applications won' t obtenir de cette façon. – Bodyslicer

Répondre

0

Got mon chemin à travers elle basée sur ce post:

http://dotnetprogrammingtipsbymuhil.blogspot.com.br/2009/12/query-contains-references-to-items.html

Pour ceux qui sont sur le même problème, suivez les étapes ci-dessus de poste.

Im mon projet, je l'ai créé une interface à une méthode concrète qui prend des données séparées de chaque base de données et les mettre sur des listes séparées, comme suit:

namespace DomainModel.Concrete 
{ 
    public class SqlImprimePeriodoPacientesRepository : IImprimePeriodoPacientesRepository 
    { 
    private static string cConexao = "Data Source=.\\SQLEXPRESS;Initial Catalog=CNR;Persist Security Info=True;User ID=sa;Password=23092000"; 
    private static string cConexao2 = "Data Source=.\\SQLEXPRESS;Initial Catalog=PE;Persist Security Info=True;User ID=sa;Password=23092000"; 

    private IConsultasRepository cRepository = new SqlConsultasRepository(cConexao2); 
    private IPacientesRepository pRepisotory = new SqlPacientesRepository(cConexao); 
    private IFuncionariosRepository fRepository = new SqlFuncionariosRepository(cConexao); 

    public IQueryable<ImprimePeriodoPaciente> ImprimePeriodoProntuarios//(int? codpac, DateTime? di, DateTime? df) 
    { 
     get 
     { 
      var consultas = 
       (
        from c in cRepository.Consultas 
        select new 
        { 
         c.cdf, 
         c.cdi, 
         c.CodConsulta, 
         c.CodPaciente1, 
         c.CodProcedimento, 
         c.CodProfissional1, 
         c.DataConsulta, 
         c.df, 
         c.di, 
         c.Evolucao, 
         c.TagConsulta, 
         c.TagConsulta2 
        } 
       ) 
       .ToList(); 

      var pacientes = 
       (
        from p in pRepisotory.Pacientes 
        select new 
        { 
         p.CodigoPaciente, 
         p.NomePaciente 
        } 
       ) 
       .ToList(); 

      var funcionarios = 
       (
        from f in fRepository.Funcionarios 
        select new 
        { 
         f.CodigoFuncionario, 
         f.NomeFuncionario 
        } 
       ) 
       .ToList(); 

      var result = 
       (
        from c in consultas 
        join p in pacientes on c.CodPaciente1 equals p.CodigoPaciente 
        join f in funcionarios on c.CodProfissional1 equals f.CodigoFuncionario 
        select new ImprimePeriodoPaciente 
        { 
         CodConsulta = c.CodConsulta, 
         DataConsulta = c.DataConsulta, 
         Evolucao = c.Evolucao, 
         NomeProfissional = f.NomeFuncionario, 
         NomePaciente = p.NomePaciente, 
         CodProfissional1 = c.CodProfissional1, 
         CodPaciente1 = c.CodPaciente1 
        } 
       ).ToList(); 


      return result.AsQueryable(); 
     } 
    } 
} 
} 

Cette méthode a fait le travail sur le Domain' s Côté du modèle, le reste dépend des résultats.

Espérons que cela aide quelqu'un!

Questions connexes