Лучшее решение.NET для часто изменяемой [закрытой] базы данных

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

Давайте рассмотрим пример практической реализации.

Предположим, что он использует стек для локальных переменных.

void
foo(void)
{
        int foo_var = 42;
}

void
bar(void)
{
        int bar_var;
        printf("%d\n", bar_var);
}

int
main(void)
{
        bar();
        foo();
        bar();
}

Полностью сломанный код выше показывает точку. После того, как мы вызываем foo, определенное место в стеке, где было размещено foo_var, установлено в 42. Когда мы вызываем bar, bar_var занимает это точное местоположение. И действительно, выполнение кода приводит к печати 0 и 42, показывая, что значение bar_var нельзя полагаться, если не инициализировано.

Теперь должно быть ясно, что требуется инициализация локальной переменной. Но может ли главное исключение? Есть ли что-нибудь, что могло бы сыграть со стеклом и в результате дать нам ненулевое значение?

Да. main - не первая функция, выполняемая в вашей программе. На самом деле есть тонны работы, необходимые для того, чтобы все наладить. Любая из этих работ могла бы использовать стек и оставлять на нем некоторые ненулевые. Не только вы не можете ожидать того же значения в разных операционных системах, это может очень сильно измениться в самой системе, которую вы используете прямо сейчас. Заинтересованные стороны могут использовать google для «динамического компоновщика».

Наконец, в стандарте языка C даже нет стека терминов. Наличие «места» для локальных переменных остается в компиляторе. Это может даже вызвать случайное дерьмо из того, что случилось в данном регистре. Это действительно может быть абсолютно все. Фактически, если запускается неопределенное поведение, компилятор имеет право делать все, что он чувствует.

8
задан Jarrod Dixon 22 March 2012 в 00:27
поделиться

12 ответов

Одна ключевая вещь знать вот состоит в том, что, если схема базы данных изменяется часто, Вы хотите иметь некоторый уровень безопасности типов времени компиляции. Я нашел, что это проблема с NHibernate, потому что он использует xml отображающиеся файлы поэтому при изменении чего-то в схеме базы данных Вы не знаете до времени выполнения, что отображение повреждается.

Это также будет проблема с сохраненным procs.

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

6
ответ дан 5 December 2019 в 09:27
поделиться

Я посмотрел бы на SubSonic с поставщиком сборки (Проект Веб-сайта) установка. Это работает отлично, потому что это автоматически повторно создает объекты DAL каждый раз, когда Вы разрабатываете свой проект, поэтому если база данных изменяется способом, который взламывает Ваш код, Вы получаете ошибку сборки.

Это работало хорошо, пока схема базы данных не стала действительно сложной, и мы поражали пределы шаблона ActiveRecord, но пока схема, не чрезвычайно сложная, это работает вполне прилично. После того как схема стабилизировалась, можно переключиться так, чтобы Вы только создали DAL, когда Вы хотите.

5
ответ дан 5 December 2019 в 09:27
поделиться

Вы определенно хотите использовать ORM. Любой ORM в порядке, но Вы хотите что-то, что генерирует классы со строгим контролем типов. Когда поля добавляются, изменили или удалили из таблицы, Вы хотите смочь повторно создать те классы и соглашение с фиксацией ошибок времени компиляции только. При использовании динамической модели у Вас, вероятно, будет много противных ошибок периода выполнения. Это ОЧЕНЬ важно! Я - часть группы разработчиков MyGeneration на SourceForge, и я думаю, что это - отличное решение Вашей проблемы. Можно генерировать безделушки, NHibernate, EasyObjects, EntitySpaces, и т.д. Если Вы хотите пойти с более дорогим решением, пойдите с CodeSmith или LLBLGen Pro. Удача - любой заинтересовал использованием MyGeneration, не стесняйтесь связываться со мной с вопросами.

2
ответ дан 5 December 2019 в 09:27
поделиться

NHibernate, но только если Вы поддавались бы наличию объекта сначала, приближаются, где Вы определяете свои классы, и затем определяете Вашу желаемую структуру таблицы в отображающихся файлах и затем создаете схему базы данных с помощью NHibernate's, созданного в классах поколения схемы.

Для того, чтобы сделать его наоборот (например, у Вас есть набор таблиц и затем Вы основываете свой объектный дизайн на том), я нашел, что MyGeneration + NHibernate работает, хотя я не слишком доволен получающимися классами (главным образом, потому что я - такой сторонник истинного Объектно-ориентированного программирования).

1
ответ дан 5 December 2019 в 09:27
поделиться

EntitySpaces может повторно создать Ваш Слой DAL/бизнеса через одну минуту и никакую потерю кода, видеть пробную версию ==> ЗДЕСЬ

Никакая Необходимая Регистрация, выполнения в соответствии с Visual Studio также.

1
ответ дан 5 December 2019 в 09:27
поделиться

Если бы я был на Вашем месте, то я попытался бы усилить то, что я знал (sprocs) с Linq2Sql. Linq2Sql может все еще использовать Ваш sprocs, но затем у Вас есть добавленная премия помещения нового инструмента в Вашем поясе. Я думаю, имея схватывание на Linq2XXX (X являющийся случайной технологией не взрослые развлечения...., которые не являются плохой идеей теперь, когда я думаю о нем), синтаксис и методология будут большим дополнением к Вашему использованию набора навыков, Linq по набору объектов является сладким путем.

Но в конечном счете что-то как NHibernate подойдет Вам лучше в конечном счете.

1
ответ дан 5 December 2019 в 09:27
поделиться

Вы уже довольны сохраненным procs, и они могли бы быть достаточно к краткому обзору далеко изменяющейся схемой. Если бы ORMs не довольны сохраненным procs затем, возможно, они работали бы с Представлениями, что Вы держите в курсе сверху изменяющейся схемы.

0
ответ дан 5 December 2019 в 09:27
поделиться

Если схема базы данных часто изменяется, предпочтите Платформу Объекта по LINQ2SQL. Если схема изменяется, с помощью L2S Вы имеете к
1) Удалите и повторно добавьте Вас таблица (освобождающий Ваши настройки)
2) Измените модель вручную (как сделано здесь в stackoverflow)

EF является надмножеством L2S, давая Вам больше гибкости использования и независимости DBMS

0
ответ дан 5 December 2019 в 09:27
поделиться

Любое решение может работать, в чем Вы действительно нуждаетесь, ряд тестов, которые гарантируют, что основной операции нравится, вставляют, выбирают, обновляют и удаляют работы. Таким образом, можно просто запустить тесты и проверить, актуальны ли отображения.

0
ответ дан 5 December 2019 в 09:27
поделиться

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

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

0
ответ дан 5 December 2019 в 09:27
поделиться

Насколько простым является приложение? Если я буду работать со схемой/дизайном в течение нескольких месяцев и не буду беспокоиться о реальном приложении... . . Я бы рассмотрел возможность использования EDM и проекта Dynamic Data Entities Web Application. Это позволит вам начать работу с наименьшими усилиями, на мой взгляд. Это позволит вам сосредоточиться на схеме, данных и других интересных вещах. Надеюсь, я не получу слишком много негатива от этого!

Вот как будет выглядеть диалог нового проекта это

1
ответ дан 5 December 2019 в 09:27
поделиться

Используйте EntitySpaces. Вы гарантированно пришлете мне цветы. просто потрясающе. измените db как хотите. нажмите кнопку, бах. все ваши изменения сделаны. без изменения вашего пользовательского кода. Я люблю это.

1
ответ дан 5 December 2019 в 09:27
поделиться
Другие вопросы по тегам:

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