Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架4按ID加载记录_C#_.net_Entity Framework_Entity Framework 4 - Fatal编程技术网

C# 实体框架4按ID加载记录

C# 实体框架4按ID加载记录,c#,.net,entity-framework,entity-framework-4,C#,.net,Entity Framework,Entity Framework 4,因此,我正在考虑创建一个通用接口来与我的对象数据存储交互,一个我可以交换出来使用EF4、亚音速、NHibernate或一些NoSQL选项的接口 所以我有一个ERD,每个表都有一个自动递增的int列“TableNameID”,这是主键,我试图弄清楚如何在通用方法中使用主键从数据库中获取一条记录 public T GetSingle<T>(int primaryKey) where T : class public T GetSingle(int primaryKey),其中T:cla

因此,我正在考虑创建一个通用接口来与我的对象数据存储交互,一个我可以交换出来使用EF4、亚音速、NHibernate或一些NoSQL选项的接口

所以我有一个ERD,每个表都有一个自动递增的int列“TableNameID”,这是主键,我试图弄清楚如何在通用方法中使用主键从数据库中获取一条记录

public T GetSingle<T>(int primaryKey) where T : class
public T GetSingle(int primaryKey),其中T:class

如何使用EF4实现这一点?

您可以通过通用的

例如,类似于:

public T GetSingle<T>(int primaryKey) where T : class
{
    var q = Context.CreateObjectSet<T>().Where("it.TableNameID = @tableNameId");
    q.Parameters.Add(new ObjectParameter("tableNameId", primaryKey));
    return q.Single();
}
public T GetSingle(int primaryKey),其中T:class
{
var q=Context.CreateObjectSet()。其中(“it.TableNameID=@TableNameID”);
q、 添加(新的ObjectParameter(“tableNameId”,primaryKey));
返回q.Single();
}

如果表名是Users,那么我想我应该更清楚,主键是UsersID。我认为这是一个开始,但我想如果我能通过EF4找到主键的名称,这将是最好的答案。这看起来是我能找到的最好的答案,同时使用反射来查找类名,使类名与表名相同,所有ID都遵循一个标准。你不需要反射来获取类名
typeof(T).Name
可以,不需要
System.Reflection
我问了另一个相关的问题。然后把答案贴在那里,比你说的要避免反思的答案更有效?你改变主意了吗?