我现在用的EF感觉虽然非常简便,但是始终不知道如何用变量代替要传入的泛型。。
例如有这样一个方法,传入数据库名,还有ID获取名字
public string get_MyName<T>(int id)
{
using (var context = new DatabaseContext())
{
var my = context.Set<T>().Find(id);
return my.name;
}
}
我要获取中班对应的ID名字就需要 这样写
name=get_MyName<中班>(10);
现在这个 中班 这个泛型类名不知道怎么用变量代替,
想要写成
var class=中班;
这样我就可以
name=get_MyName<class>(10);
如果无法用变量代替 那数据库一变动就需要整个代码全部重写。
简单来说就是如何让EF支持动态新建表。。如果我要新增一个大班数据表,传入参数class=大班,如果按照之前传统的sql代码直接拼接倒是没什么问题。
这个EF要怎么连接到新建的表 又不改代码吗?
又或者是如何动态mapping映射数据表。。
public string get_MyName<T>(T name, int id)
这样?
你这些问题,基本上都是以前不用ORM,刚刚开始学ORM的问题。
有的确实很难。
但是你如果不用以前的思维方式编程,而换成ORM的编程思维,先把EF入门了再说。
否则你还是只能回去使用SQL了。
简单的说,ORM一个特点是强类型,而你目前所有的编程思维都是弱类型的SQL 拼接。
而你所说的动态Mapping并非不能实现,而是难,需要你对EF跨过入门,进阶以后的事。
public class Test
{
public void Do<T>(int cc) where T : A
{
System.Console.WriteLine(typeof(T));
}
public void Do<T>(T t, int cc) where T : A
{
System.Console.WriteLine(t.GetType().FullName);
}
public void Do(System.Type t, int cc)
{
System.Console.WriteLine(t.FullName);
}
}
public class A { }
public class B : A { }
public class C : A { }
class Program
{
static void Main(string[] args)
{
A a = new A();
A b = new B();
A c = new C();
Test t = new Test();
t.Do(a, 1);
t.Do(b, 1);
t.Do(c, 1);
t.Do(typeof(A),1);
t.Do(typeof(B),1);
t.Do(typeof(C),1);
}
}
EF的TPC,TPT,TPH可以了解下
你还是别用EF了,EF强调的是领域模型忘掉db,你的刚好相反,不知何为领域模型。
就喜欢你这样的人,把不懂说得那么清新脱俗