異なるデータベースを使用する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";
}
}
}
接続文字列にはデフォルトの表が含まれている場合があります。したがって、接続文字列からテーブルを削除する必要があるかもしれません。 – jdweng