2013-03-13 2 views
2

Я пытаюсь сделать свой общий репозиторий EF более «широким» для работы с любым поставщиком данных (ORM), таким как EF, NHibernate, Amazon Services и т. Д. Без привязки к контексту EF.EF универсальный репозиторий для любого поставщика данных

Теперь у меня есть (GIST ссылки):

Я есть переписать IRepository и часть Repository.

Но не знаю, что делать с EF и как, наконец, избавиться от него.

Можете ли вы дать мне несколько статей или образцов кода, чтобы получить правильное направление в моей работе.

ответ

1

Идея идентификатора IRepository для создания различных реализаций для каждого ORM в репозитории. Таким образом, вам не нужно создавать свое решение в зависимости от самого ORM.

Тогда я думаю, что вы делаете это неправильно, когда вы пытаетесь сделать свой репозиторий, чтобы иметь дело со многими ORM-х

Update:

Вы должны построить свой BLL в зависимости от IRepository, ничего не зная о реализации, то вы можете использовать Constructor Injection или Dependency Resolver для передачи подходящей реализации BLL.

E.G.

public interface IProductRepository{ 
    void AddProduct(Product model); 
    void UpdateProduct(Product model); 
} 

реализация EF:

public class ProductRpository : IProductRepository 
{ 
    void AddProduct(Product model) 
    { 
     //Add any code you want maybe EF code. 
    } 
    void UpdateProduct(Product model) 
    { 
     //........ 
    } 
} 

Тогда в УСК вы зависите от IProductRepository ОНТ на ProductRepository:

public class ProductService 
{ 
    private readonly IProductRepository repository 
    public ProductService(IProductRepository repository){ 
     this.repository = repository 
    } 
// ........ the code of your BLL 
} 
+0

Так что мне нужно EfRepository, NhRepository и так далее? Как я буду называть это в моем BLL, если мне понадобится ef и nhibernate одновременно? Теперь я просто использую https://gist.github.com/maksii/5150547 –

+0

@MaksMartynov Посмотрите на мое обновление :) –

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