具有多个数据库的WPF实体框架

时间:2017-10-25 15:31:43

标签: c# wpf entity-framework linq

我正在开发一个使用不同数据库的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";
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我为每个数据库创建了单独的DBContext。由于所有数据库都不完全相同,因此这是一项挑战。每个数据库的上下文完美无缺

相关问题