2010-06-01 3 views
3

Итак, я ищу создание общего интерфейса для взаимодействия с моим DataStorage из моих объектов, который я могу поменять, чтобы использовать EF4 или SubSonic или NHibernate или некоторую опцию NoSQL.Entity Framework 4 load Запись по ID

Итак, у меня есть ERD, и у каждой таблицы есть auto incrementing int column «TableNameID», который является основным ключом. Я пытаюсь выяснить, как получить одну запись из БД с использованием первичного ключа в методе Generic

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

Как вы это используете, используя EF4?

ответ

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(); 
} 
+0

Я предполагаю, что я должен был быть более ясным, если имя таблицы является пользователей Первичный ключ UsersID. Я думаю, что это начало, но я думаю, что это сработает лучше всего, если я смогу найти имя первичного ключа каким-то образом через EF4 –

+0

. Похоже, что это лучший ответ, который я могу найти, используя отражение, чтобы найти имя класса и имя класса совпадает с именем таблицы, а все идентификаторы соответствуют стандарту. –

+0

Вам не нужно отражать, чтобы получить имя класса. 'typeof (T) .Name' будет делать и не требует' System.Reflection' –

Смежные вопросы