2013 copyright © 2013 david holding company Курс по информационни...

52
2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Post on 16-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

2013Copyright © 2013 DAVID Holding Company

Курс по информационни

технологииЗанятие №3ADO.NET. LINQ to

SQL

Page 2: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Съдържание 1/1

• ADO.NET• SQL Injection атаки• LINQ• LINQ to SQL

Page 3: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Какво е „ADO.NET“?– Част от .NET Framework– Наследник на ActiveX Data Objects (ADO)– Предоставя удобни начини за достъп до бази

данни– Минимална зависимост от избора на СУБД

Page 4: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• ADO.NET доставчици (data providers)– Data Provider for SQL Server– Data Provider for OLE DB– Data Provider for ODBC– Data Provider for Oracle– Data Provider for SQL Server Compact 4.0

Page 5: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Модели за достъп до данните в ADO.NET– Свързан модел– Несвързан модел– LINQ to SQL– Entity Framework

Page 6: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Низове за връзка (connection strings)– Служат за осъществяване на връзката с базата

данни– Представляват поредица от двойки

„параметър=стойност“, разделени с ;– Различните доставчици поддържат различни

параметри

Server=(local); Database=HealthyFood; Integrated Security=SSPI

Server=(local); Database=HealthyFood; Integrated Security=False; User ID=sa; Password=$secret$; Persist Security Info=False

Page 7: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Основни параметри на низовете за връзка– Server– Database– Integrated Security– User ID– Password– Persist Security Info

Page 8: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Автоматично генериране на низове за връзка– Използва се класът SqlConnectionStringBuilder

– Параметрите на връзката са свойства на обекта

Page 9: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Съхраняване на низове за връзка в конфигурационен файл– Позволява промяна без прекомпилиране на

приложението– Записва се в секцията <connectionStrings>– Достъпва се през статичното свойство ConfigurationManager.ConnectionStrings

Page 10: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Съхраняване на низове за връзка в конфигурационен файл

<configuration> <connectionStrings> <add name="connection" providerName="System.Data.SqlClient" connectionString="Server=(local); Database=HealthyFood; Integrated Security=SSPI" /> </connectionStrings></configuration>

connection.ConnectionString = ConfigurationManager .ConnectionStrings["connection"].ConnectionString;

Page 11: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Класът SqlConnection– Осъществява връзката с базата данни– Получава connection string– Методът Open()– Имплементира IDisposable

using (var connection = new SqlConnection()){ connection.ConnectionString = ConfigurationManager .ConnectionStrings["connection"].ConnectionString; connection.Open();

// операции върху базата...}

Page 12: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Класът SqlCommand– Служи за изпълнение на заявки– Получава отворен SqlConnection– Методите ExecuteNonQuery(), ExecuteScalar(), ExecuteReader()

– Имплементира IDisposable

using (SqlCommand command = connection.CreateCommand()){ command.CommandText = "SELECT COUNT(*) FROM [Producers]"; int producerCount = (int)command.ExecuteScalar(); Console.WriteLine("Producers count: {0}", producerCount);}

Page 13: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Класът SqlCommand – методът ExecuteReader()

using (SqlCommand command = connection.CreateCommand()){ command.CommandText = "SELECT [ProducerID], [Name] FROM [Producers]";

using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("ProducerID: {0}; Name: {1}", reader["ProducerID"], reader["Name"]); } }}

Page 14: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Класът SqlCommand – параметри– Служат за динамично предаване на стойности– Име, тип и стойност– Свойството Parameters

Page 15: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Класът SqlCommand – параметриConsole.Write("Input producer ID: ");int producerID = Convert.ToInt32(Console.ReadLine());

using (SqlCommand command = connection.CreateCommand()){ command.CommandText =@"SELECT [BrandID], [Name] FROM [Brands] WHERE ([ProducerID] = @producer_id)"; command.Parameters.AddWithValue("@producer_id", producerID);

using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("BrandID: {0}; Name: {1}", reader["BrandID"], reader["Name"]); } }}

Page 16: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Класът SqlCommand – съхранени процедури– На свойството CommandType се прсивоява

стойност CommandType.StoredProcedure– Стойности на параметрите се подават през

свойството Parameters

Page 17: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Класът SqlCommand – съхранени процедури

using (SqlCommand command = connection.CreateCommand()){ command.CommandType = CommandType.StoredProcedure; command.CommandText = "[CreateProduct]"; command.Parameters.AddWithValue("@vBrandID", 5); command.Parameters.AddWithValue("@vName", "Шоколад Milka алпийско мляко"); command.Parameters.AddWithValue("@vEnergyValue", (decimal)532); command.Parameters.AddWithValue("@vProteins", (decimal)6.8); command.Parameters.AddWithValue("@vFats", (decimal)29.6); command.Parameters.AddWithValue("@vCarbohydrates", (decimal)58); command.Parameters.Add("@vProductID", SqlDbType.Int).Direction = ParameterDirection.Output;

command.ExecuteNonQuery(); Console.WriteLine("Created product ID: {0}", (int)command.Parameters["@vProductID"].Value);}

Page 18: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

ADO.NET

• Трансакции в ADO.NET – класът TransactionScope– Методът Complete()– Имплементира IDisposable

using (var ts = new TransactionScope())using (var connection = new SqlConnection()){ connection.ConnectionString = ConfigurationManager .ConnectionStrings["connection"].ConnectionString; connection.Open();

// операции в трансакция

ts.Complete();}

Page 19: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

SQL Injection атаки

• Какво е „SQL Injection“?– Пробив в сигурността на базата данни– Възможно е да се използва, ако динамично се

генерират заявки с конкатениране на низове

Page 20: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

SQL Injection атаки

• Пример за SQL InjectionConsole.WriteLine("Input brand name to search for: ");string name = Console.ReadLine();

using (SqlCommand command = connection.CreateCommand()){ command.CommandText =@"SELECT [BrandID], [Name] FROM [Brands] WHERE ([Name] = N'" + name + "')";

using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("BrandID: {0}; Name: {1}", reader["BrandID"], reader["Name"]); } }}

Page 21: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

SQL Injection атаки

• Пример за SQL Injection

'); DELETE FROM [Products];--

SELECT [ProductID], [Name] FROM [Products]WHERE ([Name] = N''); DELETE FROM [Products];--')

Page 22: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

SQL Injection атаки

• Пример за SQL InjectionConsole.WriteLine("Input brand name to search for: ");string name = Console.ReadLine();

using (SqlCommand command = connection.CreateCommand()){ command.CommandText =@"SELECT [BrandID], [Name] FROM [Brands] WHERE ([Name] = @name)"; command.Parameters.AddWithValue("@name", name);

using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("BrandID: {0}; Name: {1}", reader["BrandID"], reader["Name"]); } }}

Page 23: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Разширителни методи на IEnumerable<T>– Въведени в .NET Framework 3.5– Улесняват прилагането на често използвани

операции върху колекции– Следват функционалната парадигма– Описани в статичния клас System.Linq.Enumerable

Page 24: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Разширителни методи на IEnumerable<T>

IEnumerable<U> Select<T, U>(this IEnumerable<T> source, Func<T, U> selector)

IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> predicate)

U Aggregate<T, U>(this IEnumerable<T> source, U seed, Func<U, T, U> function)

IEnumerable<T> Skip<T>(this IEnumerable<T> source, int count)

IEnumerable<T> Take<T>(this IEnumerable<T> source, int count)

Page 25: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Разширителни методи на IEnumerable<T> – отложено изпълнение

var numbers = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

IEnumerable<int> newNumbers = numbers .Where(x => x % 2 == 0) .Select(x => x*2);

// в този момент newNumbers съхранява информация за операциите,// които трябва да се извършат

numbers.Add(10);

// точно преди началото на обхождането на newNumbers с foreach,// операциите се изпълняват и резултатът се подава на цикълаforeach (int n in newNumbers){ Console.WriteLine(n);}

Page 26: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Разширителни методи на IEnumerable<T> – методи, които предизвикват изпълнение– First, Last, FirstOrDefault, LastOrDefault– Sum, Min, Max, Average, Count– ToList, ToArray, ToDictionary

Page 27: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Разширителни методи на IEnumerable<T> – сортировка

IOrderedEnumerable<T> OrderBy<T, U>(this IEnumerable<T> source, Func<T, U> keySelector)

IOrderedEnumerable<T> OrderByDescending<T, U>( this IEnumerable<T> source, Func<T, U> keySelector)

IOrderedEnumerable<T> ThenBy<T, U>(this IOrderedEnumerable<T> source, Func<T, U> keySelector)

IOrderedEnumerable<T> ThenByDescending<T, U>( this IOrderedEnumerable<T> source, Func<T, U> keySelector)

Page 28: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Разширителни методи на IEnumerable<T> – групиране

IEnumerable<IGrouping<U, T>> GroupBy<T, U>(this IEnumerable<T> source, Func<T, U> keySelector)

Page 29: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Разширителни методи на IEnumerable<T> – съединения

IEnumerable<W> Join<T, U, V, W>(this IEnumerable<T> first, IEnumerable<U> second, Func<T, V> firstKeySelector, Func<U, V> secondKeySelector, Func<T, U, W> resultSelector)

IEnumerable<W> GroupJoin<T, U, V, W>( this IEnumerable<T> first, IEnumerable<U> second, Func<T, V> firstKeySelector, Func<U, V> secondKeySelector, Func<T, IEnumerable<U>, W> resultSelector)

Page 30: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Какво е „LINQ“?– Language INtegrated Query– Специален синтаксис в C# и Visual Basic .NET,

който е подобен на SQL– Също въведен в .NET Framework 3.5– Трансформира се в извиквания на

разширителните методи на IEnumerable<T> и IQueryable<T>

– Няколко различни имплементации

Page 31: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• LINQ – примери

var example1 = from n in numbers select n*2;

var example1 = numbers.Select(n => n*2);

Page 32: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• LINQ – примери

var example2 = from n in numbers where n > 15 orderby n % 4, n % 7 descending select n;

var example2 = numbers .Where(n => n > 15) .OrderBy(n => n % 4) .ThenByDescending(n => n % 7);

Page 33: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• LINQ – примери

var example3 = from n in numbers group n by n % 3 into ng where ng.Count() == 2 select ng;

var example3 = numbers .GroupBy(n => n % 3) .Where(ng => ng.Count() == 2);

Page 34: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• LINQ – примери

var example4 = from n in numbers join m in numbers on n % 3 equals m % 3 select Tuple.Create(n, m);

var example4 = numbers .Join(numbers, n => n % 3, m => m % 3, (n, m) => Tuple.Create(n, m));

Page 35: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Интерфейсът IQueryable<T>– Наследява IEnumerable<T>– Различна имплементация на повечето

разширителни методи на IEnumerable<T>– Служи за трансформиране на LINQ заявки към

SQL, XPath и др.– Клас с разширителни методи System.Linq.Queryable

Page 36: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ

• Имплементации на LINQ– LINQ to Objects– LINQ to XML– LINQ to Dataset– LINQ to SQL– LINQ to Entities

Page 37: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Какво е „LINQ to SQL“?– Част от ADO.NET– Въведен в .NET Framework 3.5– Object-Relational Mapping (ORM) – ръчно

дефиниране или описване с DBML– Само с Data Provider for SQL Server– Пространството от имена System.Data.Linq

Page 38: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Ръчно описване на ORM модела– Прави се с атрибути– Пространството от имена System.Data.Linq.Mapping

Page 39: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Ръчно описване на ORM модела – таблици– Атрибутът Table– Атрибутът Column

[Table(Name = "Producers")]public class Producer{ [Column(IsPrimaryKey = true)] public int ProducerID { get; set; }

[Column(CanBeNull = false)] public string Name { get; set; }

[Column] public string Country { get; set; }}

Page 40: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Ръчно описване на ORM модела – връзки– Атрибутът Association– Типовете EntitySet<T> и EntityRef<T>

Page 41: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Ръчно описване на ORM модела – връзки[Table(Name = "Producers")]public class Producer{ private EntitySet<Brand> _brands;

[Column(IsPrimaryKey = true)] public int ProducerID { get; set; }

[Column(CanBeNull = false)] public string Name { get; set; }

[Column] public string Country { get; set; }

[Association(Storage = "_brands", OtherKey = "ProducerID")] public EntitySet<Brand> Brands { get { return _brands; } set { _brands.Assign(value); } }}

Page 42: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Ръчно описване на ORM модела – връзки[Table(Name = "Brands")]public class Brand{ private EntityRef<Producer> _producer;

[Column(IsPrimaryKey = true)] public int BrandID { get; set; }

[Column] public int ProducerID { get; set; }

[Column(CanBeNull = false)] public string Name { get; set; }

[Column] public string Description { get; set; }

[Association(Storage = "_producer", ThisKey = "ProducerID")] public Producer Producer { get { return _producer.Entity; } set { _producer.Entity = value; } }}

Page 43: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Ръчно описване на ORM модела – контекст– Базовият клас DataContext

public class HealthyFoodContext : DataContext{ public HealthyFoodContext(string connectionString) : base(connectionString) { }

public Table<Producer> Producers { get { return GetTable<Producer>(); } }

public Table<Brand> Brands { get { return GetTable<Brand>(); } }}

string connectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;var context = new HealthyFoodContext(connectionString);

Page 44: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Примерни заявки

IEnumerable<Brand> brands = from b in context.Brands select b;

IEnumerable<Brand> brands = from b in context.Brands where b.BrandID > 3 select b;

var brands = from b in context.Brands select new { BrandID = b.BrandID, BrandName = b.Name };

var brands = from b in context.Brands select new { ProducerName = b.Producer.Name, BrandName = b.Name };

IEnumerable<Brand> brands = context.Producers .Where(p => p.Name != "Kraft Foods") .SelectMany(p => p.Brands);

Producer producer = context.Producers.Single(p => p.ProducerID == 3);

Page 45: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Описване на ORM модела с DBML– Специализиран XML документ– LINQ to SQL Classes файлов шаблон– Автоматично генериране на C# код– partial класове - добавяне на

методи/свойства във външни файлове

Page 46: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• ORM модел: Здравословно хранене

Page 47: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Добавяне на записи

Brand brand = context.Brands.Single(b => b.BrandID == 5);var product = new Product{ Name = "Шоколад Milka алпийско мляко", EnergyValue = 532,};brand.Products.Add(product);

Page 48: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Редактиране на записи

Product product = context.Products.Single(p => p.ProductID == 19);product.Proteins = (decimal)6.8;product.Fats = (decimal)29.6;product.Carbohydrates = (decimal)58;

Page 49: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Изтриване на записи

Product product = context.Products.Single(p => p.ProductID == 19);context.Products.DeleteOnSubmit(product);

Page 50: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

LINQ to SQL

• Записване на промените в базата данни– Методът SubmitChanges() на класа DataContext

context.SubmitChanges();

Page 51: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Въпроси?

Page 52: 2013 Copyright © 2013 DAVID Holding Company Курс по информационни технологии Занятие №3 ADO.NET. LINQ to SQL

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Благодаря!

• Александър Далемски– [email protected][email protected]– Skype: musasho– https://www.facebook.com/adalemski

• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://www.facebook.com/groups/david.academy/