2012-06-04 5 views
2

Я работаю над общим хранилищем, используя Entity Framework/MVC3/Ninject.MVC3. Интерфейс выглядит так.MVC3 EF Ninject Generic Repository

public interface IRepository<TEntity> where TEntity : class 
{ 
    IQueryable<TEntity> Query { get; } 
    void Add(TEntity entity); 
    void Edit(TEntity entity); 
    void Delete(TEntity entity); 
} 

Реализация моего бетона выглядит так.

public class EFRepository<T> : IRepository<T> where T : class 
{ 
    private EFDbContext context = new EFDbContext(); 

    public IQueryable<T> Query 
    { 
     get { return context.Set<T>().AsQueryable(); } 
    } 

    public void Add(T entity) 
    { 
     context.Set<T>().Add(entity); 
     context.SaveChanges(); 
    } 

    public void Edit(T entity) 
    { 
     context.Entry<T>(entity).State = System.Data.EntityState.Modified; 
     context.SaveChanges(); 
    } 

    public void Delete(T entity) 
    { 
     context.Set<T>().Remove(entity);    
     context.SaveChanges(); 
    } 
} 

Ninject имеет связывание

kernel.Bind(typeof(IRepository<>)).To(typeof(EFRepository<>)); 

Что мне нужно сделать, это получить последнюю вставку ID в конкретной реализации. У меня есть таблица транзакций, которая получит вставку на основе последней таблицы и вставляет идентификатор. Я мог бы вызвать транзакцию с контроллера, но я бы скорее всего сделал все это на уровне доступа к данным, поэтому я могу легко написать транзакцию после последнего вставки/обновления.

Во-первых, приведенный выше пример правильного способа реализации универсального репозитория. Во-вторых, есть способ получить данные, которые я хочу с помощью этого метода?

ответ

0

Когда вы вызываете Add на сущности, а таблица имеет столбец идентификатора (auto increment), вы можете просто проверить объект после SaveChanges(), и он будет содержать сгенерированный идентификатор.

+0

Можете ли вы привести пример того, как я получу это из класса EFRepository? Из контроллера я могу ссылаться на int id = myObject.PrimaryKey, но как мне получить коннект из общего репозитория напрямую. – Jeff

+0

@Jeff - вы этого не делаете. Это точка репозитория, вы не знаете, как он работает. Вам не нужно получать контекст из репозитория, вы просто проверяете объект, который вы добавили для его идентификатора. –

+0

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