З технологією ado. NET

Тим, хто пише запити в коді сторінки, присвячується...

Вітаю всіх!

На хабрі є небагато інформації про те, що у наступній версії VisualStudio 2008 буде ADO.NET EntityFramework. (Відкрию секрет, ця версія вже з'явилася.) Ця розробка є універсальним фреймворком, який дозволяє створювати даталогіку вашого проекту в пару кліків миші.
Досі працюючи з даталогікою, я стикався з 2 видами проектів. Перші були створені на відомому фреймворку NHibernate, інші реалізовували даталогіку програмістами. Я вже 3 роки займаюся написанням та розробкою різних систем і весь цей час розробляв логіку роботи з даними виключно ручками.
І ось, днями, після того, як я поставив нову вінду, я завантажив VisualStudio WebDeveloper Express, і з радістю виявив у комплекті постачання ADO.NET EntityFramework. Через деякий час зареєстрував домен, створив простенький сайт і почав тренувати свої сили в написанні програм під цей фреймворк.

Для початку необхідно створити простий Web-проект з базою даних. До бази даних теж непогано було б підключити відразу через DataBase Explorer. Просто потім буде зручніше.

Після цього до проекту треба додати новий елемент «ADO.NET Entity Data Model».

Системі треба буде вказати рядок для з'єднання з базою, а також вказати, звідки візьметься перша модель ADO.NET EF.

У своїй БД я вже маю дві дуже прості таблиці Post і User, тому не мудруючи лукаво, я змусив систему створити модель на основі моєї БД. Після всіх цих, дуже простих дійя отримав робочу модель БД. Більше того, вивчивши цю модель візуально, я не забув зазирнути в код і подивитися, як же фрейворк описує всі мої класи?

  1. namespace DataBaseCore
  2. ///
  3. /// Там немає коментарів для DbModel in the schema.
  4. ///
  5. public partial class DbModel: global::System.Data.Objects.ObjectContext
  6. ///
  7. /// Initializes a new DbModel object using the connection string found в "DbModel" секція application configuration file.
  8. ///
  9. public DbModel() :
  10. base ("name=DbModel", "DbModel")
  11. this .OnContextCreated();
  12. /* Урізав за непотрібністю */
  13. public partial class Post: global::System.Data.Objects.DataClasses.EntityObject
  14. ///
  15. /// Create a new Post object.
  16. ///
  17. /// Initial value of Id.
  18. public static Post CreatePost(int id)
  19. Post Post = New Post ();
  20. post.Id = id;
  21. return post;

Наметане око фахівця з роботи з даталогікою показало наявність досить простого та витонченого класу, який дозволив працювати як з постами в системі, так і з користувачами.

Ну, що ж, код у нас вже є, залишилося тільки його використовувати. І тут, нам відкриваються всі принади та можливості ASP.NET. Серед великої кількості джерел даних на сторінці я побачив Entity Data Source, який із задоволенням надає дані на запит із нашого класу. Перетягуємо його на форму, запускаємо майстер налаштування, і швиденько чіпляємо датасорс на таблицю постів.

Безсумнівно, набагато приємніше став вигляд опису датасорца в ASPX коді.

  1. < asp:EntityDataSource ID ="dsPosts" runat ="server" ConnectionString ="name=DbModel"
  2. DefaultContainerName = "DbModel" EntitySetName = "Post" >
* Цей source code was highlighted with Source Code Highlighter .

Можна сказати - блищить витонченістю.

Після появи на формі провайдера даних потрібен і споживач. Не розумні, я додав простенький код, який просто відображає всі пости послідовно.

  1. < asp:Repeater runat ="server" ID ="repPosts" DataSourceID ="dsPosts" >
  2. < HeaderTemplate >
  3. < ItemTemplate >
  4. < div >
  5. < h3 >
  6. < asp:Label ID ="lblHeader" runat ="server" Text ="<%# Eval("Header") %>" >
  7. < p >
  8. < asp:Label ID ="lblText" runat ="server" Text ="<%# Helpers.TypographText(Eval("Text").ToString()) %>" >
* Цей source code was highlighted with Source Code Highlighter .

І ось тут закінчується найпростіша частина моєї розповіді. Досі все, що було зроблено, можна повторити за допомогою миші. Це було дуже просто. Ми тільки-но створили об'єктно-орієнтоване уявлення БД, і використовуючи це уявлення, почали виводити дані з бази на сторінку. При цьому ми жодного разу не написали жодного запиту, не отримували дані з бази безпосередньо, etc.

Але що ж виводити користувачеві, якщо у нас немає нічого в БД? Не добре. Потрібно написати форму заповнення бази. Тепер ми кинемо мишепрограмування і займемося написанням коду.

Я зробив дві найбільш базові дії для роботи з постами в системі - це додавання та видалення. Зробити редагування за аналогією з цим кодом не складе труднощів ні для кого.

  1. namespace DBW
  2. public class Post
  3. public Post()
  4. public static void New(String PostText, String PostHeader, Int32 UserId)
  5. p.Header = PostHeader;
  6. p.Text = Helpers.TypographText(PostText);
  7. p.PublishDate = DateTime .Now;
  8. p.User = (from usr in m.User where usr.Id == UserId select usr).First();
  9. m.AddToPost(p);
  10. m.SaveChanges();
  11. public static void Delete(Int32 PostId)
  12. DataBaseCore.DbModel m = New DataBaseCore.DbModel();
  13. DataBaseCore.Post p = New DataBaseCore.Post();
  14. p = (from pst in m.Post where pst.Id == PostId select pst).First();
  15. m.DeleteObject(p);
  16. m.SaveChanges();
* Цей source code was highlighted with Source Code Highlighter .

Здавалося б, все просто, і так це так. Але є кілька нюансів.
По-перше – це LINQ. Без нього в ADO.NET нікуди. Так що не варто відливати і взагалі забивати на SQL або LINQ, писати запити все одно доведеться.
По-друге, цей код автоматично генерується фреймворком, тому особливої ​​зручності в деяких моментах очікувати не доведеться, і завжди треба бути готовим змінити вже створений студією код. Наприклад, тут у рядку 16 було б зручніше використовувати не об'єкт типу користувач, який мені довелося вибирати з БД, а одразу передавати значення ідентифікатора користувача. Так було б зручніше для цього коду, але це не є універсальним. Тому код потребує доопрацювання та переосмислення. Можливо, просто треба передавати не ідентифікатор користувача, а об'єкт типу користувач.

Що далі? Далі я продовжуватиму писати проект, заглиблюючись у нетрі ADO.NET Entity Framework, і буду із задоволенням ділитися своїми дослідженнями з вами, шановні хабраюзери. Відповідно, будуть нові статті, з більш серйозними та глибокими даними.

UPD. Тема дуже велика. Тут не розкрито і відсотка можливостей, але продовження буде 8-)

Технології ADO.NET, . NET FrameWork, CORBA

Технологія доступу до віддалених баз даних ADO .NET була розроблена також для архітектури клієнт-сервер. Крім двох рівнів віддалених баз даних – клієнтського та серверного – з'являються додаткові рівні – сервери бізнес-логіки, що реалізують бізнес-логіку додатків.

Технологія ADO .NET встановлює таку схему роботи клієнта із сервером баз даних:

встановлення з'єднання з сервером;

отримання необхідних даних;

Закриття з'єднання;

Обробка даних;

Встановлення з'єднання для передачі змінених даних на сервер.

Основу ADO .NET складають два основні модулі:

Провайдер даних (Data Provider. NET FrameWork)

резидентна реляційна база даних (DataSet).

Провайдер даних, як це випливає з його назва, відповідає за зв'язок додатка з джерелом даних та за маніпуляцію даними. Провайдер даних включає наступні об'єкти маніпулювання даними:

а) Connection використовується для встановлення з'єднання з джерелом даних, а також для керування транзакціями.

б) Command дозволяє маніпулювати даними джерела, а також виконувати процедури, що зберігаються. При цьому можуть використовуватися параметри передачі даних в обох напрямках.

в) DataAdapter служить сполучною ланкою між резидентною БД DataSet і джерелом даних і зазвичай використовує об'єкт Command для виконання команд SQL як при заповненні DataSet даними, так і при зворотній передачі змінених клієнтом даних до джерела. Для виконання цих функцій у ньому є чотири методи: SelectCommand, InsertCommand, UpdateCommand та DeleteCommand.

г) DataReader забезпечує отримання даних від джерела лише зчитування. Якщо програма клієнта не модифікує дані і не потрібна довільна вибірка даних, а достатньо їх одноразового перегляду, використання DataReader замість DataSet дозволить зберегти ресурси комп'ютера, а також підвищити швидкодію програми.

Резидентна реляційна база даних є отриману клієнтом реляційну БД, яка зберігається в його резидентній оперативній пам'яті.

Далі клієнт в автономному режимі здійснює обробку даних і при необхідності модифікує їх, після чого знову встановлюється з'єднання з сервером та модифікована інформація з резидентної бази даних передається назад.

Така схема взаємодії певною мірою схожа на роботу архітектури.

сервер і часто застосовується підприємствами при роботі з віддаленими базами даних через глобальну мережуІнтернет.

Для забезпечення доступу до об'єктів через глобальну мережу Інтернет у складі ADO.

Із зазначених характеристик видно, що технологія ADO .NET забезпечує:

Можливість взаємодії між даними різних форматів, у тому числі HTML та XML;

Значне зниження витрат під час роботи з віддаленими базами даних через глобальну мережу Інтернет.

Останнє оновлення: 31.10.2015

Сьогодні велике значення має робота із даними. Для зберігання даних використовуються різні системиуправління базами даних: MS SQL Server, Oracle, MySQL і так далі. І більшість великих додатків так чи інакше використовують для зберігання цих систем управління базами даних. Однак, щоб здійснювати зв'язок між базою даних та додатком на C#, необхідний посередник. І саме таким посередником є ​​технологія ADO.NET.

ADO.NET є технологією роботи з даними, яка заснована на платформі.NET Framework. Ця технологія представляє нам набір класів, через які ми можемо надсилати запити до баз даних, встановлювати підключення, отримувати відповідь від бази даних та здійснювати низку інших операцій.

Причому важливо відзначити, що систем управління баз даних може бути безліч. У своїй сутності можуть відрізнятися. MS SQL Server, наприклад, для створення запитів використовує мова T-SQL, а MySQL та Oracle застосовують мову PL-SQL. Різні системи баз даних можуть мати різні типи даних. Також можуть відрізнятися якісь інші моменти. Однак функціонал ADO.NET побудований таким чином, щоб надати розробникам уніфікований інтерфейс для роботи з різними СУБД.

Основу інтерфейсу взаємодії з базами даних у ADO.NET представляє обмежене коло об'єктів: Connection, Command, DataReader, DataSet та DataAdapter. За допомогою об'єкта Connection відбувається встановлення підключення до джерела даних. Об'єкт Command дозволяє виконувати операції з даними БД. Об'єкт DataReader зчитує дані, отримані в результаті запиту. Об'єкт DataSet призначений для зберігання даних із БД та дозволяє працювати з ними незалежно від БД. І об'єкт DataAdapter є посередником між DataSet та джерелом даних. Головним чином через ці об'єкти і йтиме робота з базою даних.

Однак, щоб використовувати один і той же набір об'єктів для різних джерел даних, необхідний відповідний провайдер даних. Власне через провайдер даних в ADO.NET здійснюється взаємодія з базою даних. Причому для кожного джерела даних в ADO.NET може бути свій провайдер, який і визначає конкретну реалізацію вищевказаних класів.

За замовчуванням у ADO.NET є такі вбудовані провайдери:

    Провайдер для MS SQL Server

    Провайдер для OLE DB (Надає доступ до деяких старих версій MS SQL Server, а також до БД Access, DB2, MySQL та Oracle)

    Провайдер для ODBC (Провайдер для джерел даних, для яких немає своїх провайдерів)

    Провайдер Oracle

    Провайдер компанії EntityClient. Провайдер даних для технології ORM Entity Framework

    Провайдер для сервера SQL Server Compact 4.0

Крім цих провайдерів, які є вбудованими, існує також безліч інших, призначених для різних баз даних, наприклад MySQL.

Основні місця імен, які використовуються в ADO.NET:

    System.Data: визначає класи, інтерфейси, делегати, що реалізують архітектуру ADO.NET

    System.Data.Common: містить загальні класи для всіх провайдерів ADO.NET

    System.Data.Design: визначає класи, які використовуються для створення власних наборів даних

    System.Data.Odbc: визначає функціональність провайдера даних для ODBC

    System.Data.OleDb: визначає функціональність провайдера даних для OLE DB

    System.Data.Sql: зберігає класи, які підтримують специфічну для SQL Server функціональність

    System.Data.OracleClient: визначає функціональність провайдера для баз даних Oracle

    System.Data.SqlClient: визначає функціональність провайдера для баз даних MS SQL Server

    System.Data.SqlServerCe: визначає функціональність провайдера для SQL Server Compact 4.0

    System.Data.SqlTypes: містить класи для типів даних MS SQL Server

    Microsoft.SqlServer.Server: зберігає компоненти для взаємодії SQL Server та середовища CLR

Схематично архітектуру ADO.NET можна представити так:

Функціонально класи ADO.NET можна розбити на два рівні: підключений та відключений. Кожен провайдер даних.NET реалізує свої версії об'єктів Connection, Command, DataReader, DataAdapter та інших, що складають підключений рівень. Тобто за допомогою них встановлюється підключення до БД та виконується з нею взаємодія. Як правило, реалізації цих об'єктів для кожного конкретного провайдера у назві мають префікс, який вказує на провайдер:

Інші класи, такі як DataSet, DataTable, DataRow, DataColumn та ряд інших становлять відключений рівень, оскільки після вилучення даних DataSet ми можемо працювати з цими даними незалежно від того, встановлено підключення чи ні. Тобто після отримання даних із БД програма може бути відключена від джерела даних.

Коли архітектори n-рівневої архітектури оцінюють будь-яку нову технологію, шаблон чи стратегію, вони вирішують, як ця нова частина головоломки поєднуватиметься з архітектурою. Якщо є платформа Entity Framework, інтеграція не викликає жодних складнощів. Вона може бути інтегрована в n-рівневу архітектуру, а також однорівневу архітектуру.

19.03.2009 15:32

Entity Framework FAQ

Розуміння моделювання сутності, відображення таких моделей на реляційні бази даних, а також проектування сутнісних моделей даних (Entity Data Model, EDM) є першими кроками до розуміння Entity Framework. Я почну свою статтю з відповідей на питання про основи Entity Framework, у тому числі про клас ObjectContext, а потім відповім на питання про те, коли і де варто використовувати Entity Client з Entity SQL. Крім того, я планую пояснити різницю між EntityClient та службами Object Services, а також наслідки використання запитів LINQ та Entity SQL разом із цими службами.

16.02.2009 15:15

Огляд ADO.NET Entity Framework

У випуску Visual Studio 2008 року в ADO.NET представлена ​​нова архітектура Entity Framework. Вона дозволяє розробникам звертатися до даних, використовуючи об'єктну модель замість логічної чи реляційної моделі даних. Entity Framework допомагає абстрагувати логічну схемуданих у концептуальну модель та забезпечує кілька способів взаємодії з концептуальною моделлю через служби Object Services та нового постачальника даних, що називається EntityClient. У статті цього місяця обговорюється, що таке архітектура Entity Framework, як вона застосовується у додатку та як з її урахуванням розробляти та програмувати.

13.02.2009 18:44

Розробка сутнісної моделі даних за допомогою Entity Framework

Entity Framework – це нова технологіядля ADO.NET. Вона дозволяє розробникам візуалізувати дані, використовуючи логічну, а чи не фізичну модель, завдяки чому забезпечується певна гнучкість розробки. У липневому номері журналу за 2007 рік у рубриці «Точки даних» ми давали докладний оглядтехнології Entity Framework (вона має бути офіційно випущена у першій половині 2008 року).

13.02.2009 18:33

Використання атрибутів для нормалізації та валідації бізнес-сутностей

У корпоративному програмуванні при проектуванні рівня доступу до даних часто постає питання роботи з бізнес-об'єктами (бізнес-сутністю): це завантаження/зміни/збереження та переміщення між рівнями. Існує два основних підходи для цього - використання власних бізнес-сутностей або стандартних засобів(ADO.NET надає досить зручні способи для цього) – використання DataSet.

20.01.2007 03:54

ADO.NET: Огляд технології

Багато програмістів, що працюють з базами даних на платформах Microsoft, могли оцінити простоту та зручність технології ADO - ActiveX Data Objects Інтутитивно-зрозумілий інтерфейс та логічний набір об'єктів разом із простотою програмування заслужено отримали визнання програмістів. Незважаючи на це, разом із новою платформою .NET Microsoft представляє і нове покоління засобів доступу до баз даних – ADO.NET.

27.12.2006 01:32

Операції над даними із ієрархічною структурою. Розробка розподілених програм в.NET

Ця стаття демонструє методику читання та запису ієрархічних наборів рядків у джерелі даних. У прикладах коду, наведених у цій статті, для з'єднання з базою даних Microsoft SQL Server або Microsoft Desktop Engine (MSDE) використовується керований провайдер SQL (SQL managed provider). Для з'єднання з іншими джерелами даних OLEDB-сумісними слід застосовувати керований провайдер ADO (ADO managed provider).

27.12.2006 01:26

Робота з автономними даними в ADO.NET

Технологія ADO.NET, на відміну від своїх попередників ADO та OLE DB, була розроблена спеціально для використання в web додатках, де немає постійних з'єднань з БД. Традиційна робота з даними в ADO.NET будується за такою схемою: створюється з'єднання Connection, потім воно відкривається методом Open, створюється об'єкт команда Command, що інкапсулює SQL команду, вона виконується, а з'єднання потім закривається. Такий підхід забезпечує доступ до результатів запитів. Тобто. читаючи дані за допомогою DataReader, ви не можете перестрибнути через кілька записів або повернутись до попередньої. Поточний доступ має максимальну продуктивність.



Завантаження...
Top