2017-10-25 2 views
1

Ich entwickle eine WPF-Anwendung, die verschiedene Datenbanken verwendet. Die Datenbank wird aus einer Combobox auf jedem Formular ausgewählt und füllt das Datenraster mit den Daten.WPF Entity Framework mit mehreren Datenbanken

Das Problem, das ich habe, ist dies: eine der Datenbanken hat eine Tabelle Projects, der Rest der Datenbanken haben diese Tabelle nicht. Abhängig von der Datenbank gibt es zwei Abfragen, die das Datagrid füllen.

Das Problem, das ich habe, ist, wenn die Anwendung zu starten und die Datenbank auswählen, die nicht Project Tabelle hat, dann die Datenbank auszuwählen, die die project Tabelle aus der Combobox hat, ist mir die folgende Fehlermeldung erhalten:

"System.NotSupportedException occurred HResult=0x80131515
Message=The specified type member 'ProjectCode' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

Hier ist mein Code:

private void GetTemplates() 
    { 
     List<string> result = new List<string>(); 
     if (CrsInterfaceDbDataContext.DbSelector == StringEnum.GetStringValue(DatabaseHelper.GiCrsUtms)) 
     { 
      try 
      { 
       using (var db = new CrsInterfaceDbDataContext()) 
       { 
        string projectCode = CrsInterfaceDbDataContext.ProjectCode; 

        if (projectCode != null) 
        { 
         var templates = (from c in db.ClientProducts 
             join ps in db.ClientProductStatuses on c.ClientProductStatusID equals ps 
              .ClientProductStatusID 
             join pr in db.Projects on c.ProjectCode equals pr.ProjectCode 
             join s in db.ClientProductStatuses on c.ClientProductStatusID equals s 
              .ClientProductStatusID 
             join pc in db.ClientProductComponents on c.ClientProductID equals pc.ClientProductID 
             join f in db.GiFilename on c.FileNameID equals f.FileNameID 
             join fg in db.GiFileGroups on f.FileGroupID equals fg.FileGroupID 
             join mp in db.GiMailParamses on fg.FileGroupID equals mp.FileGroupID 
             join cco in db.ClientComponent on pc.ClientComponentID equals cco.ClientComponentID 
             join ct in db.GiComponentType on cco.ClientComponentTypeID equals ct 
              .ClientComponentTypeID 
             where (c.ProjectCode == projectCode) 

             select new 
             { 
              c.ClientProductID, 
              c.ClientProductName, 
              StatusDescription = ps.Description, 
              c.MailingRegion, 
              FileName = f.Filename, 
              FileGroup = fg.Description, 
              c.Description, 
              c.Duplex, 
              mp.Carrier, 
              mp.ServiceLevel, 
              pc.Qty, 
              ClientComponetType = ct.Description, 
              c.ProjectCode, 
              pr.ProjectName 
             }).ToList(); 

         DgTemplates.ItemsSource = templates; 
         LblTotalRecords.Content = "Total records: " + templates.Count(); 

        } 


       } 
      } 
      catch (InvalidOperationException ex) 
      { 
       lblError.Content = "Database not selected"; 
      } 
     } 
     else 
     { 
      try 
      { 
       using (var db = new CrsInterfaceDbDataContext()) 
       { 
        var templates = (from c in db.ClientProducts 
            join ps in db.ClientProductStatuses on c.ClientProductStatusID equals ps 
             .ClientProductStatusID 
            join s in db.ClientProductStatuses on c.ClientProductStatusID equals s.ClientProductStatusID 
            join pc in db.ClientProductComponents on c.ClientProductID equals pc.ClientProductID 
            join f in db.GiFilename on c.FileNameID equals f.FileNameID 
            join fg in db.GiFileGroups on f.FileGroupID equals fg.FileGroupID 
            join cco in db.ClientComponent on pc.ClientComponentID equals cco.ClientComponentID 
            join ct in db.GiComponentType on cco.ClientComponentTypeID equals ct 
           .ClientComponentTypeID 
            select new 
            { 
             c.ClientProductID, 
             c.ClientProductName, 
             StatusDescription = ps.Description, 
             c.MailingRegion, 
             FileName = f.Filename, 
             FileGroup = fg.Description, 
             c.Description, 
             c.Duplex, 
             ServiceLevel = c.Class, 
             c.Carrier, 
            }).ToList(); 

        DgTemplates.ItemsSource = templates; 
        LblTotalRecords.Content = "Total records: " + templates.Count(); 



       } 

      } 
      catch (InvalidOperationException ex) 
      { 
       lblError.Content = "Database not selected"; 
      } 
     } 
    } 
+0

Die Verbindungszeichenfolge kann die Standardtabelle enthalten. Daher müssen Sie die Tabelle möglicherweise aus der Verbindungszeichenfolge entfernen. – jdweng

Antwort

0

ich eine Lösung gefunden. Ich habe separaten DBContext für jede Datenbank erstellt. Da alle Datenbanken nicht identisch sind, war dies eine Herausforderung. Kontext für jede Datenbank funktioniert einwandfrei

Verwandte Themen