1. GlobalsDB Entity Framework
↔
Команда: Субботин Валерий
Ковалев Евгений
Ментор: Широкопетлева М.С.
Харьковский национальный университет
радиоэлектроники
4. Привлечение
внимания
разработчиков к
GlobalsDB за счет
значительного
снижения
сложности
интеграции в
приложение
Способствование
увеличению
числа
приложений,
использующих
нереляционные
БД (GlobalsDB)
Увеличится
число и
быстродействие
приложений,
работающих с
“Big Data”
Человечество
получит
огромное число
инструментов,
облегчающих
повседневную
жизнь
Цели проекта
6. LINQ
Language Integrated Query (LINQ) — проект Microsoft по добавлению синтаксиса языка запросов, напоминающего
SQL, в языки программирования платформы .NET Framework.
Преимущества :
Знакомый синтаксис для написания запросов
Проверка на наличие ошибок синтаксиса и на безопасность типа при компиляции
Улучшенная поддержка отладчика
Поддержка IntelliSense
Краткие и удобочитаемые, особенно при фильтрации нескольких условий
Предоставляют широкие возможности фильтрации, упорядочивания и группировки с минимумом кода приложения
Могут переноситься в другие источники данных практически без изменений
7. Пример запроса на получение сущности «Country», имя которой начинается с определенной подстроки
ADO .NET (SQL) Entity Framework (SQL)
private static List<Country> GetCountryWithStartLetters(string startLetters)
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
const string commandText = "SELECT Name, Continent, HasSee, Description " +
"FROM Countries " +
"WHERE Name LIKE @Mask";
var sqlCommand = new SqlCommand(commandText, connection);
sqlCommand.Parameters.AddWithValue("@Mask", startLetters + "%");
var reader = sqlCommand.ExecuteReader();
var result = new List<Country>();
while (reader.Read())
{
result.Add(new Country
{
Name = reader.GetString(0),
Continent = reader.GetFieldValue<Continent>(1),
HasSee = reader.GetBoolean(2),
Description = reader.GetString(3)
});
}
return result;
}
}
private static List<Country> GetCountryWithStartLetters
(string startLetters)
{
using (var context = new Context(connectionString))
{
var result = context.Countries.Where(c =>
c.Name.StartsWith(startLetters)).ToList();
return result;
}
}
8. [Table(Name = "TestCountry")]
public sealed class Country
{
[Column(IsPrimaryKey = true)]
public string Name { get; set; }
[Column(Name = "ContinentType")]
public Continent Continent { get; set; }
[Column()]
public bool HasSee { get; set; }
[Column()]
public string Description { get; set; }
[Column()]
public List<Town> Towns { get; set; }
}
Описание сущности, которую планируется сохранить в БД
9. Существуют определенные правила по применению атрибута ColumnAttribute:
1. Сущность должна иметь хотя бы один первичный ключ, помеченный с помощью
свойства IsPrimaryKey атрибута ColumnAttribute.
2. Для автоинкрементных ключей (заданных с помощью свойства IsDbGenerated)
поддерживаются только целочисленные типы (short, int или long)
3. Только один автоинкрементный ключ разрешен
4. Сущность должна объявлять либо автоинкрементный ключ, либо обычный, но
не оба сразу.
11. private static void InsertExample(Country country)
{
using (var ctx = new Context())
{
ctx.Country.InsertOnSubmit(country);
ctx.SubmitChanges();
}
}
Пример запроса на добавление новой страны в БД
13. using (var ctx = new Context())
{
var townsNames = ctx.Country.SelectMany(c=>c.Towns).Select(t=>t.Name).ToList();
}
2
3
2
1
3
Последовательность извлечения данных по LINQ - запросу
16. Сравнение быстродействия GlobalsDB EF и Microsoft Entity Framework
1065 1913
179 715
6549
27883
214 848
0
5000
10000
15000
20000
25000
30000
Чтение всех данных Получение количества
городов в каждой стране
Добавление/удаление
города
Получение стран
Европы, у которых
больше 1 города
Количество выполненных запросов за 1 секунду
MS Entity Framework GlobalsDB EF
17. ВЫВОДЫ:
Представленный framework упростит процесс работы с GlobalsDb, повысит
скорость разработки приложений, а также позволит с легкостью перевести
существующие приложения, использующие реляционные БД, на GlobalsDb,
если понадобиться повысить эффективность слоя данных.
Проект на данный момент не имеет аналогов на рынке, способных сравниться
по функционалу с данной работой.
18. Ссылки :
Подробная документация http://goo.gl/C2BdCp
Исходный код демо-приложения http://goo.gl/U9IQ5A
Исходный код GlobalsDB EF http://goo.gl/Bkq806
Путь к работающему демо-приложению http://109.86.224.112:30190/
СПАСИБО ЗА ВНИМАНИЕ