使用Entity Framework 4按ID加载记录

3

我正在考虑创建一个通用接口,与对象的数据存储进行交互,可以交换使用EF4或SubSonic或NHibernate或一些NoSQL选项。

我有一个ERD,每个表都有一个自增长的int列"TableNameID"作为主键。我正试图找出如何在通用方法中使用主键从数据库获取单个记录。

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

使用EF4,您需要如何实现这一点?
1个回答

2
你可以通过通用的 ObjectContext.CreateObjectSet() 来完成这个任务。
例如,像这样:
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();
}

我想如果表的名称是“用户”,主键应该是“用户ID”。我认为这是一个开始,但是如果可以通过EF4找到主键的名称,那么它可能会更好。 - runxc1 Bret Ferrier
这似乎是我能找到的最佳答案,除了使用反射查找类名并使类名与表名相同以及所有ID遵循标准。 - runxc1 Bret Ferrier
你不需要使用反射机制来获取类名。typeof(T).Name 就可以做到,并且不需要 System.Reflection - Craig Stuntz
我问了另一个相关的问题,并在那里发布了答案,比这里的更好:https://dev59.com/0nA85IYBdhLWcg3wD_O8 - runxc1 Bret Ferrier
你之前说过你想避免使用反射?现在改变主意了吗? - Craig Stuntz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接