簡體   English   中英

具有多個數據庫的WPF實體框架

[英]WPF Entity Framework with multiple databases

我正在開發使用不同數據庫的WPF應用程序。 從每種形式的組合框中選擇數據庫,並用數據填充數據網格。

我的問題是:數據庫之一具有表Projects ,其余數據庫沒有此表。 根據數據庫的不同,有兩個查詢會填充數據網格。

我遇到的問題是,當啟動應用程序並選擇沒有Project表的數據庫,然后從組合框中選擇具有project表的數據庫時,出現以下錯誤:

“發生System.NotSupportedException HResult = 0x80131515
Message = LINQ to Entities不支持指定的類型成員'ProjectCode'。 僅支持初始化程序,實體成員和實體導航屬性。

這是我的代碼:

    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";
            }
        }
    }

我找到了解決方案。 我為每個數據庫創建了單獨的DBContext。 由於所有數據庫都不完全相同,因此這是一個挑戰。 每個數據庫的上下文都完美無缺

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM