Я работаю над общим хранилищем, используя 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 в конкретной реализации. У меня есть таблица транзакций, которая получит вставку на основе последней таблицы и вставляет идентификатор. Я мог бы вызвать транзакцию с контроллера, но я бы скорее всего сделал все это на уровне доступа к данным, поэтому я могу легко написать транзакцию после последнего вставки/обновления.
Во-первых, приведенный выше пример правильного способа реализации универсального репозитория. Во-вторых, есть способ получить данные, которые я хочу с помощью этого метода?
Можете ли вы привести пример того, как я получу это из класса EFRepository? Из контроллера я могу ссылаться на int id = myObject.PrimaryKey, но как мне получить коннект из общего репозитория напрямую. – Jeff
@Jeff - вы этого не делаете. Это точка репозитория, вы не знаете, как он работает. Вам не нужно получать контекст из репозитория, вы просто проверяете объект, который вы добавили для его идентификатора. –
Хорошо, я просто ищу самый простой способ вставить данные в таблицу транзакций о последней вставке или обновлении. Мне нужно знать имя таблицы и последний первичный ключ. Я надеялся, что это можно извлечь таким образом, чтобы легко запустить обновление транзакции после сохранения. – Jeff