Взаимодействие с базой данных C # - PullRequest
0 голосов
/ 04 декабря 2010

Какой самый общий способ обработки взаимодействия с базой данных в C#

Я ожидаю, что смогу легко заменить драйверы базы данных (поставщики данных).

Я также думаю (не уверен, если это возможно) , что было бы здорово, если бы я мог переключить источник данных с чего-либо DB-like (например, обычный MySQLбаза данных) к чему-то совершенно другому - например, данные, сериализованные в xml или произвольный двоичный файл. Я подозреваю, что в последнем случае потребовалось бы написать какую-нибудь оболочку взаимодействия с Query-File или что-то в этом роде.


Так что - может кто-нибудь поделиться способом для достиженияописанное поведение?

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

Если да, то что я должен сделать, чтобы воплотить это в жизнь и как будет выглядеть мой конвейер разработки?

Спасибо.

Ответы [ 6 ]

2 голосов
/ 04 декабря 2010

Вот небольшое пошаговое руководство по шаблону репозитория с использованием EF Framework:

someRepository.Find.Where(something => something.IsRed && something.IsBig)

Создайте универсальный интерфейс с именем 'IRepository' типа T, содержащий все методы для доступа к данным.

Это может выглядеть так:

interface IRepository<T> where T : class
{
    IEnumerable<T> FindAll(Expression<Func<T, bool>> exp);

    T FindSingle(Expression<Func<T, bool>> exp);

    // And many more!
}   

Создайте абстрактный класс 'Repository', реализующий этот интерфейс:

class Repository<T> : IRepository<T> where T : class
{
    TestDataContext _dataContext = TestDataContext(); // Would be your EF Context

    public IEnumerable<T> FindAll(Expression<Func<T, bool>> exp)
    {
        _dataContext.GetTable<T>().Where<T>(exp);
    }

    public T FindSingle(Expression<Func<T, bool>> exp)
    {
        _dataContext.GetTable<T>().Single(exp);
    }

    // And many more!
}

Теперь мы можем создать интерфейс для таблицы / объектов ModelClass, который реализует наш «IRepository» и конкретный класс, расширяющий абстрактный класс «Repository» и реализующий «IModelClassInterface»:

interface IModelClassRepository : IRepository<ModelClass>
{
}

И соответствующий репозиторий для его реализации:

class ModelClassRepository : Repository<ModelClass>, IModelClassRepository
{
}

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

Вызывать эти методы будет очень просто:

ModelClassRepository _repo = new ModelClassRepository();
_repo.Find.Where(something => something.IsRed && something.IsBig)

Да, это означает, что вам нужно выполнить какую-то работу, но вам будет намного проще изменить источник данных позже.

Вы даже можете переключать EF Framework с любым поставщиком данных на ваш выбор. Будь то XML, db4o или обычный старый Txt.

0 голосов
/ 04 декабря 2010

"Каков самый общий способ обработки взаимодействия пользователя с базой данных в C #"?

Самый общий способ - это ADO.NET ..., который представляет собой просто блоки SQL или вызовы хранимых процедур вВаша БД имеет свои преимущества.Однако у него много недостатков, так как его нелегко абстрагировать от ООП, который не имеет никакого интеллектуального смысла ... EF очень круто, поскольку он устраняет многие из этих недостатков, но если он для вас новый, то синтаксис немного привыкнет к

0 голосов
/ 04 декабря 2010

Могу ли я предложить вам посмотреть LLBLGen Pro . Мы использовали их ORM, и это уничтожает конкурентов. Их новая версия позволяет вам использовать их инструмент и генерировать код для нескольких платформ (Entity Framework, Nhibernate, LINQ-to-SQL). Но их структура представляется наиболее гибкой для многих сценариев.

Вы можете узнать больше информации от Франса в его блоге . Он главный гуру LLBLGen и оригинальный создатель LLBLGen.

0 голосов
/ 04 декабря 2010

В .NET Framework де-факто стандартом для этого сейчас является Entity Framework . Принимайте любую критику, которую вы найдете в Интернете в отношении EF, с недоверием, потому что недавно была выпущена версия 4 EF, которая устранила большое количество проблем со старой версией. На данный момент это, на мой взгляд, лучший инструмент для абстрагирования базы данных в пространстве .NET (который я пробовал).

Остерегайтесь LINQ to SQL, Microsoft вряд ли будет тратить много ресурсов на улучшение продукта, потому что EF сейчас является флагманом в этой области.

0 голосов
/ 04 декабря 2010

1 слово.

NHibernate

NH3.0 поддерживает LINQ, и его тривиально заменить SQL Server для Posgres или MyFailSQL.

"как данные, сериализованные в xmlили произвольный двоичный файл. "не уверен, что это значит.

0 голосов
/ 04 декабря 2010

Вам следует поискать шаблон репозитория.

Asp.net также использует так называемый шаблон поставщика для создания заменяемых компонентов, таких как поставщик членства, поставщик карты сайта и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...