我用的EntityFramework和WCF初學者,所以我還不知道一切是如何工作的,所以我會嘗試是最好的,我可以解釋我的情況..EntityFramework,如何決定使用switch/case的dbSet <TEntity>?
我有一個使用WCF服務用的EntityFramework和我的數據庫已經設法得到它工作得很好,例如是這樣的:當我有一個以上的表,我要決定使用哪一個
using (var entities = new databaseEntities())
{
// Check if there is 0 rows, then just add the new row.
int count = entities.Table1.Where(i => i.Name == name).Count();
if (count < 1)
{
var newEntry = new Table1
{
Name = name,
InsertDate = DateTime.Now,
CreatedBy = createdBy,
Comment = comment,
Active = true
};
entities.Table1.Add(newEntry);
entities.SaveChanges();
}
}
問題到達。這些表基本上是相同的,因此會使用相同的操作,所以我想爲它們使用一個函數(這樣我可以避免重複的代碼)。但我似乎無法理解如何我可以在運行時更改表,例如通過開關/外殼。
例如:
// A function that gets the type of the table I want to access
void WriteToSomeTable(int type)
{
switch (type)
{
case 0:
//The table to update is Table1
break;
case 1:
//The table to update is Table2
break;
}
}
如果我想獲得所有具有給定名稱的條目的數量與
int count = entities.Table1.Where(i => i.Name == "somename").Count();
我怎樣才能使「entities.Table1」確定在運行時? 我可以讓變量:
System.Data.Entity.DbSet<Table1> firstTable = entities.Table1;
System.Data.Entity.DbSet<Table2> secondTable = entities.Table2;
所以,我認爲,與列表我可以設置一個int指標;與交換機/箱,然後不同的值,只需使用
int count = list[index].Where(i => i.Name == "somename").Count();
,但我不能將它們添加到列表中,因爲它們是不同類型的
// entity.Table1 is
System.Data.Entity.DbSet<Table1>
// and entity.Table2 is
System.Data.Entity.DbSet<Table2>
的ArrayList不會削減它要麼,因爲如果我嘗試使用ArrayList中的對象,沒有「.Where」函數。我也試過只是System.Data.Entity.Dbset,但要使用「.Where」函數,我需要使用.Cast()函數,但我不能存儲所需的「TEntity」到一個變量(或可以嗎?)。例如:
System.Data.Entity.DbSet firstTable = entity.Table1
Type t = firstTable.GetType();
int count = firstTable.Cast<t>().Where(i => i.Name == "somename").Count();//doesn't work
//This, however works:
int count = firstTable.Cast<Table1>().Where(i => i.Name == "somename").Count();
我希望我做什麼我在這裏的問題是,從某種意義上說:)希望有人有一個想法,如何解決這個問題,因爲我有這個鬥爭現在的年齡,唯一的解決辦法我已經想出了除了「entity.Table」部分之外,在每個開關/情況下具有完全相同的代碼的單獨函數調用。而不必編寫同一套代碼多次是不是一個很好的解決方案:(
真棒!這很簡單,它非常有效!我對泛型函數不太熟悉,所以這甚至沒有想到:)謝謝一堆! – Juuseri
高興地幫助:) – caner
我會使用'任何'而不是'計數'。 –