2

Я выполнил несколько проектов с использованием шаблона репозитория (Interface => Repository), но теперь я столкнулся с новой проблемой (не большой) с одним из кода моего коллеги. Мы реализуем услугу Generic, которая содержит все методы операций CRUD для всех классов сущностей.Внедрение универсального сервиса для операций CRUD с использованием EF6

Мы используем базы данных первых в этом проекте, и имеют следующую структуру,

aspx.cs> entityclass модель (AppUser)> Generic Service> Entity.

public class UserServices : GenericServices<User> 
    { //Implemented methods } 

И это как Generic служба:

public class GenericServices<T> where T : class 
{ 
    App_dbEntities _db; 
    IDbSet<T> ent; 

    public GenericServices() 
    { 
     _db = new App_dbEntities(); 
     ent = _db.Set<T>(); 
    } 

    public IEnumerable<T> Select() 
    { 
     return ent; 
    } 

    public T Select(string id) 
    { 
     ?? 
    } 
} 

Я пытаюсь справиться свойствами ПРИМИТИВОВ, но так как это универсальное, он не знает, что лицо я обработка на данный момент , Я видел несколько примеров с использованием предиката в качестве параметра функции. Пожалуйста, дайте мне руку.

+2

вы можете использовать 'find' метод интерфейса IDbSet:' Возвращение Ent. Найти (идентификатор) ' – Thomas

ответ

2

Если вы хотите гибкость и готовы использовать выражения в качестве предиката

public virtual T Select(Expression<Func<T, bool>> predicate) 
{ 
    return _dbSet.FirstOrDefault(predicate); 
} 

Использование

var service = new AppUserServices(); 
var appUser = service.Select(s=> s.CompositeKey1 == "some_value" && s.CompositeKey2 == "some_other_value"); 
var appUser2 = service.Select(s=> s.IntProperty == 100 && s.AnotherStringProperty == "some_other_value"); 
1

Согласовано с @Thomas, вы можете использовать Find метод, как я покажу ниже:

public virtual T Select(params object[] keyValues) 
{ 
    return ent.Find(keyValues); 
} 

Таким образом, вы также можете найти объекты с составными первичными ключами. я предлагаю взглянуть на этот codeplex project, вы найдете реализацию Repository, UnitOfWork, а также службы картины. Это даст вам хорошие идеи.