2017-10-25 17 views
1

異なるデータベースを使用するWPFアプリケーションを開発しています。データベースはすべてのフォームのコンボボックスから選択され、データグリッドにデータを埋め込みます。複数のデータベースを持つWPF Entity Framework

問題はこれです:データベースの1つにテーブルProjectsがあり、残りのデータベースにはこのテーブルがありません。データベースによっては、データグリッドを満たす2つのクエリがあります。

私が午前問題は、コンボボックスからprojectテーブルを持つデータベースを選択し、アプリケーションを起動してProjectテーブルを持っていないデータベースを選択するとき、私は次のエラーを取得しています:

"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.

ここで

私のコードです:

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

接続文字列にはデフォルトの表が含まれている場合があります。したがって、接続文字列からテーブルを削除する必要があるかもしれません。 – jdweng

答えて

0

私は解決策を見つけました。私はデータベースごとに別々のDBContextを作成しました。すべてのデータベースが全く同じではないため、これは難題でした。各データベースのコンテキストは完璧に動作します

関連する問題