Новая.NET 3.5 Проекта: Какую технологию DAL использовать?

Избегайте финализаторов. Нет никакой гарантии, что их назовут своевременно. Могло потребоваться довольно долгое время, прежде чем Система управления памятью (т.е. сборщик "мусора") решит собрать объект с финализатором.

Многие люди используют финализаторы, чтобы сделать вещи как близкие сокетные соединения или удалить временные файлы. Путем выполнения, таким образом, Вы делаете свое поведение приложения непредсказуемым и связанным с тем, когда JVM идет в GC Ваш объект. Это может привести к "из памяти" сценарии, не из-за "кучи" Java, исчерпываемой, а скорее из-за системы, исчерпывающей дескрипторы для конкретного ресурса.

Еще одна вещь иметь в виду состоит в том, что представление вызовов к System.gc () или такие молотки может показать хорошие результаты в Вашей среде, но они не обязательно переведут в другие системы. Не все выполняют ту же JVM, существуют многие, SUN, IBM J9, BEA JRockit, Гармония, OpenJDK, и т.д. Эта JVM, которой все приспосабливают JCK (те, которые были официально протестированы, который), но имеет большую свободу когда дело доходит до создания вещей быстро. GC является одной из тех областей, в которые все вкладывают капитал в большой степени. Используя молоток часто будет времена уничтожать то усилие.

7
задан Houman 29 November 2009 в 15:02
поделиться

5 ответов

Вы упоминаете Entity Framework как часть «контра» для параметра Linq to SQL, но вам следует рассмотреть его вместо Linq to SQL - он обеспечивает почти такую ​​же функциональность плюс Больше. Для проектов с небольшими базами данных это определенно дает большую отдачу. В EF может быть сложно управлять контекстом для больших баз данных, а изменения схемы могут привести к поломке, но эти проблемы возникают при любом подходе к доступу к данным.

На мой взгляд, самый большой недостаток EntLib заключается в том, что вы все еще катят ваши собственные объекты данных. Корпоративная библиотека избавляет от большого количества кода сантехники прямо "

3
ответ дан 7 December 2019 в 05:24
поделиться

А. Также проверьте NHibernate.

B. DataSet - самый быстрый и простой, но вы много программируете.

Все остальное - много хорошего в использовании инструментов ORM, но есть много проблем с их трехуровневым использованием.

(ленивая загрузка - это проблема, с которой нужно справиться, создание множества больших деревьев объектов, влияющих на производительность, кеширование не настолько умно, насколько это возможно)

Итак - это зависит от ваших основных потребностей и сколько времени вы хотите потратить на изучение EL / LINQ или NHibernate, прежде чем вы начнете кодировать, b / c есть кривая обучения с этими инструментами.

1
ответ дан 7 December 2019 в 05:24
поделиться

Раньше мы использовали DataSets с EntLib 4.1 Data Application Block.

Теперь мы используем Entity Framework. Мы добились значительного повышения производительности с Entity Framework по сравнению с EntLib 4.1. (Запрограммируйте уровень данных для 80 таблиц за 10 часов вместо 80)

Entity Framework 4 все еще находится в бета-версии, но если до запуска вашего проекта пройдет некоторое время, я бы выбрал EF 4. Вы получаете производительность как ORM в то же время гибкость использования POCO (Plain Old Clr Objects)

2
ответ дан 7 December 2019 в 05:24
поделиться

NHibernate имеет в целом лучший сочетание набора функций, зрелости и поддержки.

NHibernate, Entity Framework,

1
ответ дан 7 December 2019 в 05:24
поделиться

Лучшая идея - иметь возможность использовать обе технологии одновременно. Как это сделать? Это очень просто с шаблоном репозитория. Сначала вам нужно создать общий интерфейс IRepository. Что-то вроде этого:

public interface IERepository<E>
{
    DbTransaction BeginTransaction();
    void EndTransaction();
    void Add(E entity);
    void Delete(E entity);
    int Save();

    ObjectQuery<E> DoQuery(string entitySetName);
    IList<E> SelectAll(string entitySetName);
    E SelectByKey(int Key);

    bool TrySameValueExist(string fieldName, object fieldValue, string key);
    bool TryEntity(ISpecification<E> selectSpec);

    int GetCount();
    int GetCount(ISpecification<E> selectSpec);
    int AddAndSave(E entity);

}

Я предпочитаю Entity Framework. На его основе создал 3 проекта. Работает очень быстро, особенно запросы с разбиением на страницы. Итак, после того, как вам нужно создать базовый универсальный класс Repository с виртуальными методами, которые реализуют интерфейс IRepository. И это все. Теперь у вас есть очень быстрый способ создать DAl, написав такой простой код:

public class MonthRepository:Repository<Month>
{

}

У вас есть возможность переопределить все методы базового класса и создать доступ к БД с помощью хранимой процедуры там, где вам нужно. И вы можете обойтись без изменения кода в других местах. Вы по-прежнему будете возвращать объекты того же типа, но получите их другим способом.

Прочтите подробнее на http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

1
ответ дан 7 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: