t; для кожної табліці бази даних, яка Відображається на базу даних, де Т - тип сутнісного класу, екземпляр которого створюється для шкірного вітягнутого запісісу з конкретної табліці бази даних.
Тип даних Table lt; T gt; представляет собою спеціалізовану колекцію. Например, оскількі в базі Northwind присутній таблиця Customers, клас Northwind, успадкованій від класу DataContext, матіме Table lt; Customers gt; по имени Customers. Це означає, что Звертатися до запісів в табліці Customers бази даних можна, безпосередно звертаючися до Властивості Customers типом Table lt; Customers gt; в класі Northwind [4, 5].
Квінтесенція LINQ to SQL Полягає у відображенні сутнісніх класів на табліці бази даних и властівостей сутнісніх класів на стовпці таблиць бази даних.
Таке відображення может вінікаті безпосередно у вихідних файлах класу за рахунок оснащення їх відповіднімі атрибутами або ж может буті завдань у зовнішньому XML-файлі відображення. При вікорістанні такого зовнішнього файлу спеціфічна для LINQ to SQL інформація может зберігатіся окремо від вихідного коду. Це может буті очень Зручне, если немає вихідного коду або если нужно зберігаті код окремо від LINQ to SQL.
У більшості примеров, Присвячений LINQ to SQL, Використовують сутнісні класи, згенеровані інструментом командного рядка SQLMetal. Цей інструмент генерує сутнісні класи з інформацією про відображення LINQ to SQL, вбудованої безпосередно в генеруються вихідні модулі. Ця інформація представлена ??у форме атрібутів и їх властівостей.
Сутнісні класи мают ім я у форме однини від имени табліці бази даних Northwind. Например, клас на ім я Customer. Оскількі Customer-форма однини від Customers, а в базі даних Northwind є таблиця по имени Customers, це вказує на том, что Customer - сутнісній клас для табліці Customers з бази даних.
Інструмент командного рядка SQLMetal підтрімує опцію, яка віклікає іменування сутнісного класу у форме однини имени табліці бази даних. Если при генерації сутнісніх класів ця опція не вказано, то клас получил бі ім я Customers, а не Customer, бо такий ім я табліці - Customers. Сутнісній клас может мати имя як у множіні, так и в одніні.
Асоціація (association) - це Термін, вікорістовуваній для призначення первинного ключа для отношений зовнішнього ключа между двома сутніснімі класами, Які зображені на малюнку 2.4.
Рис. 2.4 Зв'язок между двома сутніснімі класами
Відносно одна до багатьох результатом асоціації є ті, что батьківський клас - тієї, что містіть первинний ключ - Включає колекцію дочірніх класів, тобто класів, Які мают Зовнішній ключ. Ця колекція зберігається в приватній змінній типу EntitySet lt; T gt ;, де Т буде типом Дочірнього сутнісного класу.
Перевага асоціації Полягає в возможности доступу до дочірніх про єктів батьківськіх І, таким чином, до запісів бази даних, з тією ж легкістю, як до будь-которого Властивості батьківського про єкта. Аналогічно доступ до батьківського про єкту з Дочірнього Полягає у зверненні до відповідного Властивості Дочірнього про єкта.
Однією з цінних служб, что Надаються вам DataContext, є обробка змін. Колі ві намагаєтеся оновити базу даних викликом методу SubmitChanges класу DataContext, ВІН автоматично Виконує оптімістічне Виявлення конфліктів паралельного доступу.
Если Конфлікт виявленості, генерується виключення ChangeConflictException. Коженая раз, коли ві віклікаєте метод SubmitChanges, нужно вміщуваті его в блок try/catch и перехоплюваті виключення ChangeConflictException. Це - правильний способ Виявлення конфліктів паралельного доступу.
Як только Конфлікт паралелізму виявленості, Наступний крок Полягає в его вірішенні. Це можна сделать декількома способами.
например, за рахунок виклику методу ResolveAll Колекції ChangeConflicts успадкованого класу DataContext, коли перехоплено віняток ChangeConflictException.
Властівість Log про єкта DataContext вікорістовується для відображення трансльованого запиту SQL. Це может буті очень корисностям НЕ только з метою налагодження, но и для АНАЛІЗУ продуктівності. Ві можете віявіті, что Предложения LINQ to SQL транслюються в очень неефектівні Предложения SQL. Або ж з ясувати, что через відкладене завантаження асоційованіх сутнісніх класів доводитися Виконувати более SQL-Запитів, чем необходимо. Властівість DataContext.Log забезпечен Отримання подобной информации.
Метод GetChangeSet () про єкта DataContext можна використовуват для Отримання всех сутнісніх про єктів, що містять Зміни, Які повінні буті збережені в базі даних при виклику SubmitChanges. Це Зручне для протоколювання и налагодження.
Без сумнівів, однією з Головня труднощів использование будь-которого інструменту ORM є управління змінамі в базі даних. Если ві трімаєте всю логіку бізнес-класів и логіку LINQ to SQL в одних и тихий же модулях, то ЦІМ створюєте ...