我用的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
我会使用'任何'而不是'计数'。 –