Ця стаття присвячена створенню моделі даних, яка красиво лягала б на SQL і містила в собі «правильне» ООП спадкування. Треба сказати, що ця задача виникала у мене в різний час на різних проектах, і вирішувалася вона там теж по-різному. Назви підходів взяті з ситуації на відповідних проектах термінології.

Читати далі →

Розширення Entity Framework 6, про які ви могли і не знати


Багато програмісти роблять записи, описують труднощі, красиві і не дуже рішення, з якими доводиться стикатися з обов'язку служби. Це може бути власний технічний блог, робоча вікі, або навіть звичайний блокнот — суть одна. Поступово, з маленьких Evernote-нотаток може вирости ціла стаття на Хабр. Але час йде, зміна місця роботи обіцяє зміни в стеку розробки, так і технології не стоять на місці (до речі, EF Core вже пару місяців як версії 1.1). З іншого боку, Entity Framework 6 був і залишається "робочою конячкою" для доступу до даних в корпоративних додатках на стеку .net, не в останню чергу завдяки своїй стабільності, низького порогу входу і широкої популярності. Тому, я сподіваюся, стаття все ще виявиться комусь корисною.
Зміст:
  1. Database First без EDMX
  2. Робота з отсоединенными графами
  3. Модифікація SQL. Додавання табличних вказівок
  4. Кешування даних за межами часу життя DbContext
  5. Retry при помилках від SQL Server
  6. Підміняємо DbContext, ізолюючи від реальної БД
  7. Швидка вставка

Читати далі →

Використовуємо Entity Framework Core з додатком універсальної платформи Windows


Ви знаєте, що UWP має досить особливий принцип роботи з даними. Це обумовлено тим, що основним способом поширення додатків є завантаження з Store. Крім того, сама універсальність платформи передбачає, що ОС може бути встановлена на пристрої різного типу. А, скажімо, SQL Server на телефон поки що не встановлюють. Крім REST сервісів єдиним доступним форматом баз даних SQLite. Радує те, що формат досить популярний. Для роботи з базами цього формату існує кілька бібліотек-обгорток. Ну і ось, з релізом .Net Core, під UWP стає доступною робота з Entity Framework Core. Не втримався і вирішив написати про це.

Читати далі →

Підводні камені Entity Framework і продуктивність

При роботі з Entity Framework, як і з будь-яким іншими ORM, часто виникають питання, пов'язані з його продуктивністю. Багато хто розробники з-за незнання нюансів роблять помилки, що призводять до поганих результатів. Потім, під час аналізу проблем і пошуку рішень, недостатньо розібравшись в питанні, приходять до висновку, що поліпшити ситуацію можна лише переходом на інший ORM чи відмовою від нього взагалі. Хоч в деяких ситуаціях таке рішення може виявитися розумним, найчастіше не все так погано — просто потрібно знати нюанси. У цій статті я спробував зібрати ті підводні камені, з якими мені найчастіше доводилося стикатися на практиці.


Читати далі →

Критичне відміну компіляції дерева виразів в Visual Studio 2015

Після переходу на Visual Studio 2015 зіткнувся з неприємним і досить критичним відзнакою в компіляції одного і того ж коду старою версією студії і нової.

Суть його полягає в тому, що при генерації дерева виразів Visual Studio 2015 трохи по іншому генерує результат, а саме вставляє операнд Convert() для явного приведення типів, які можуть загалом наводитися неявно.

Читати далі →

Entity Framework 6 (7) vs NHibernate 4: погляд з боку DDD

В мережі вже є чимало порівнянь Entity Framework і NHibernate, але всі вони здебільшого фокусуються на технічній стороні питання. У цій статті я б хотів порівняти ці дві технології з точки зору Domain Driven Design (DDD). Ми розглянемо кілька прикладів коду і побачимо як ці дві ORM дозволяють нам справлятися з труднощами.


Читати далі →

Entity Framework і продуктивність, спроба друга

У першій своїй спробі закрити діру в продуктивності Entity Framework'а я розглядав тільки матеріалізацію. Але далі в процесі роботи, як того і слід було чекати, я натрапив і на інше, більш вагоме обмеження. Операції вставки, модифікації і видалення записів відбуваються теж повільно. На 100 вставок EF посилає в базу 100 запитів на вставку, ніяк не намагаючись їх згрупувати.

Крім цього, в одному з проектів була виявлена одна неприємна помилка: EF версії 5.0.0, при роботі з Oracle, Clob/Xml поля не дозволяє вставляти рядки більше 2000 символів.

Читати далі →

Entity Framework: підвищуємо продуктивність при збереженні даних в БД

При додаванні/зміну великої кількості записів (103 і вище), продуктивність Entity Framework залишає бажати кращого. Причиною цього є як архітектурні особливості самого фреймворку, так і неоптимальний генерується SQL. Забігаючи вперед — збереження даних в обхід контексту скорочує час виконання на порядки.

Зміст статті:
  1. Insert/Update стандартними засобами Entity Framework
  2. Пошук вирішення проблеми
  3. Інтеграція Entity Framework і SqlBulkCopy
  4. Просунута вставка з використанням MERGE
  5. Порівняння продуктивності
  6. Висновки

Читати далі →

Breeze Server - розмежовуємо доступ до об'єктів за допомогою атрибутів


У минулій статті Breeze.js + Entity Framework + Angular.js = зручна робота з сутностями бази даних прямо з браузера ми розглянули створення найпростішої програми, де робили вибірки і зберігали дані в базі прямо з javascript в браузері. Звичайно ж першими у читачів виникли запитання про безпеку. Тому сьогодні ми розглянемо, як можна організувати розмежування доступу. Для цього ми трохи доопрацюємо наш додаток з минулої статті так, щоб можна було за допомогою атрибутів роздати певні права доступу на додавання, видалення, редагування і перегляд даних певним користувачам або ролями.

Читати далі →

Як створити DbContext усередині Visual Studio, або "Що робити, якщо хочеться дивного?"



Починаючи з версії 14.1, XtraReports з'явилася вбудована підтримка ORM Entity Framework. Якщо раніше розробнику доводилося використовувати стандартний компонент BindingSource для прив'язки елементів звіту до даних і потім вручну писати код для завантаження даних з EF моделі, то зараз йому достатньо лише вибрати конкретний контекст (з поточного проекту або складання, зазначеної в References проекту) і вказати використовується рядок підключення. Компонент EFDataSource сам створить контекст з потрібною рядком підключення і поверне дані звіту.


Читати далі →