Как стать автором
Обновить

Используем Entity Framework Core с приложением универсальной платформы Windows

.NET *Разработка под Windows Phone *Разработка под Windows *
Tutorial

Вы знаете, что UWP имеет довольно особый принцип работы с данными. Это обусловлено тем, что основным способом распространения приложений является загрузка из Store. Кроме того, сама универсальность платформы подразумевает, что ОС может быть установлена на устройства различного типа. А, скажем, SQL Server на телефон пока что не устанавливают. Кроме REST сервисов единственным доступным форматом баз данных является SQLite. Радует то, что формат довольно популярный. Для работы с базами этого формата существует несколько библиотек-оберток. Ну и вот, с релизом .Net Core, под UWP становится доступной работа с Entity Framework Core. Не удержался и решил написать об этом.
Не удержаться и прочитать об этом
Всего голосов 15: ↑14 и ↓1 +13
Просмотры 11K
Комментарии 2

Использование Entity Framework Core code-first с СУБД SQLite при разработке WinForms-приложений в VisualStudio 2015

.NET *Visual Studio *SQLite *
Из песочницы
На первый взгляд нижеприведённый материал может показаться ещё одним банальным «хэллоууорлдом», «туториалом от Капитана Очевидность», коих уже предостаточно на просторах Сети, но это впечатление обманчиво. На деле чтобы добиться того же результата с нуля у WinForms-программиста, не работавшего ранее с Entity Framework Core (не путать с классической Entity Framework) и вооружённого только уже валяющимися в изобилии на просторах Сети туториалами по EF Core и документацией может уйти куда больше времени, чем он наивно ожидал до того, как взялся за дело. Так случилось и со мной. Посему хочу поделиться опытом.
Читать дальше →
Всего голосов 20: ↑16 и ↓4 +12
Просмотры 28K
Комментарии 16

EntityFramework: (анти)паттерн Repository

Совершенный код *.NET *Проектирование и рефакторинг *C# *
Из песочницы
Repository Pattern
Репозиторий является посредником между слоем доступа к данным и доменным слоем,
работая как in-memory коллекция доменных обектов. Клиенты создают декларативные
описания запросов и передают их в репозиторий для выполнения.
  — свободный перевод Мартина Фаулера

EntityFraemwork предоставляет нам готовую реализацию паттернов Repository: DbSet<T> и UnitOfWork: DbContext. Но мне часто приходится видеть, как коллеги используют в своих проектах собственную реализацию репозиториев поверх существующих в EntityFraemwork.


Чаще всего используется один из двух подходов:


  1. Generic Repository как попытка абстрагироваться от конкретного ORM.
  2. Repository как набор запросов к выбранной таблице БД (паттерн DAO).

И каждый из этих подходов содержит недостатки.

Читать дальше →
Всего голосов 47: ↑45 и ↓2 +43
Просмотры 91K
Комментарии 159

Переход с ASP.NET к ASP.NET Core 1.1

CMS *.NET *ASP *C# *
Tutorial

Переход с ASP.NET к ASP.NET Core 1.1


Содержание:


  1. Введение
  2. Сравнение стеков технологий
  3. Полезные команды
  4. Сборка и запуск проекта
  5. Entity Framework Core
  6. Введение

Одним из направлений деятельности нашей компании является веб-разработка. Для разработки сайтов мы используем ASP.NET MVC, и, по обыкновению, хостингом для нашего добра служит Windows Server. Но время идет, появляются новые технологии, а старые технологии эволюционируют, как, впрочем, и желания наших клиентов.       


Со временем возникла нужда запустить новый проект на хостинге linux. Все бы ничего, задача, казалось бы, относительно тривиальная.  Но в потребностях значилось использование нашей CMS, написанной на стеке ASP.NET MVC 5, что значительно усложняло задачу.


Поразмышляв, мы решили что наиболее подходящим вариантом будет перенос наших наработок на стек ASP.NET Core. В процессе миграции на рельсы новых технологий возникло достаточно много интересных моментов и сложностей.


Сравнение стеков технологий


Ниже я сопоставил стеки технологий, использовавшихся для разработки наших проектов изначально и тех, что мы выбрали в качестве замены в процессе миграции.


  • Windows Server 2008 — Debian 8.8
  • IIS 7 — Kestrel в связке Nginx 1.12
  • .NET framework 4.5 — .NET Core
  • ASP.NET MVC 5 — ASP.NET Core 1.1
  • Microsoft SQL — .NET Core 1.1
  • Entity Framework 6.0 — Entity Framework 1.1
  • Встроенный механизм для создания бандлов и минификации — WebPack 2

Полезные команды


Сборка и запуск проекта


Для запуска и сборки проекта можно использовать dotnet run. Можно немного облегчить задачу и использовать команду dotnet run -watch. Данная команда запускает dotnet в

Читать дальше →
Рейтинг 0
Просмотры 1.3K
Комментарии 0

Реализуем свой оператор в Entity Framework Core

.NET *C# *

Однажды пасмурным мартовским субботним утром я решил посмотреть, как обстоят дела у Майкрософта в благом деле по трансформированию мастодонта Entity Framework в Entity Framework Core. Ровно год назад, когда наша команда начинала новый проект и подбирала ORM, то руки чесались использовать все как можно более стильное и молодежное. Однако, присмотревшись к EFC, мы поняли, что он еще очень далек продакшна. Очень много проблем с N+1 запросами (сильно улучшили во 2й версии), кривые вложенные селекты (пофиксали в 2.1.0-preview1), нет поддержки Many-to-Many (все еще нет) и вишенка на торте — отсутствие поддержки DbGeometry, что в нашем проекте было очень критично. Примечательно, что последняя фича находится в road map проекта с 2015 года в списке высокоприоритетных. У нас в команде есть даже шутка на эту тему: "Эту задачу добавим в список высокоприоритетных". И вот прошел один год с последней ревизии EFC, вышла уже вторая версия данного продукта и я решил проверить, как обстоят дела.

Читать дальше →
Всего голосов 36: ↑36 и ↓0 +36
Просмотры 13K
Комментарии 23

Помогаем Queryable Provider разобраться с интерполированными строками

Программирование *.NET *C# *
Из песочницы

Тонкости Queryable Provider


Queryable Provider не справляется вот с этим:


 var result = _context.Humans
                      .Select(x => $"Name: {x.Name}  Age: {x.Age}")
                      .Where(x => x != "")
                      .ToList();

Он не справится с любым выражением, которое будет использовать интерполированную строку, но без трудностей разберет такое:


 var result = _context.Humans
                      .Select(x => "Name " +  x.Name + " Age " + x.Age)
                      .Where(x => x != "")
                      .ToList();

Особенно болезненно править баги после включение ClientEvaluation(исключениe при вычислении на клиенте), все профайлы автомаппера должны быть подвергнуты жесткому анализу, на поиск этой самой интерполяции. Давайте разберемся в чем дело и предложим свое решение проблемы

Читать дальше →
Всего голосов 37: ↑37 и ↓0 +37
Просмотры 6.4K
Комментарии 18

Enumerable: How to yield a business value

Высокая производительность *.NET *C# *ООП *Микросервисы *
This article is a brief explanation about how using a common language keywords might have an influence on the budget of IT-infrastructure of a project or help to achieve some limitations/restrictions of hosting infrastructure and, moreover, will be a good sing of the quality and maturity of the source code.
Read more →
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 1.7K
Комментарии 0

Let's help QueryProvider deal with interpolated strings

Разработка веб-сайтов *Программирование *.NET *Проектирование и рефакторинг *C# *
Перевод

Specifics of QueryProvider


QueryProvider can’t deal with this:


var result = _context.Humans
                      .Select(x => $"Name: {x.Name}  Age: {x.Age}")
                      .Where(x => x != "")
                      .ToList();

It can’t deal with any sentence using an interpolated string, but it’ll easily deal with this:


var result = _context.Humans
                      .Select(x => "Name " +  x.Name + " Age " + x.Age)
                      .Where(x => x != "")
                      .ToList();

The most painful thing is to fix bugs after turning on ClientEvaluation (exception for client-side calculation), since all Automapper profiles should be strictly analyzed for interpolation. Let’s find out what’s what and propose our solution to the problem.

Read more →
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 1.3K
Комментарии 0

OData сервис без написания кода

Разработка веб-сайтов *.NET *
Tutorial

Одним из наиболее важных аспектов разработки программного обеспечения является быстрое создание прототипов. Для большинства служб необходимы по крайней мере некоторые операции CRUD, и большинство приложений можно описать как приложения, управляемые данными. API, которые я пишу, в основном берут данные из базы данных и возвращает их клиенту в виде JSON. OdataToEntity — это инструмент, который генерирует API из базы данных и устраняет необходимость в написании отдельного REST API.

Читать дальше →
Всего голосов 15: ↑12 и ↓3 +9
Просмотры 5.8K
Комментарии 3

Использование DbTool для засеивания (seeding) баз данных в приложениях .NET (Core)

Open source *.NET *ASP *
Tutorial

Представляем вашему вниманию DbTool — утилиту командной строки для экспорта данных БД в различные форматы и open-source библиотеку Korzh.DbUtils, использование которых может значительно упростить первоначальное "засевание" базы данных в вашем .NET (Core) приложении.


С помощью этого набора инструментов вы сможете:


  1. Сохранить данные из вашей локальной БД в файлы некого текстового формата (XML, JSON), которые легко подключить к проекту.
  2. Использовать сохранённые файлы для заполнения базы данных самого приложения при его первом старте.

Ниже я расскажу зачем все это нужно, как проинсталлировать и настроить данные инструменты и опишу детальный сценарий их использования.


image

Читать дальше →
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 6.2K
Комментарии 5

Спецификации на стероидах

Блог компании Singularis Lab .NET *
Тема абстракций и всяких прелестных паттернов – хорошая почва для развития холиваров и вечных споров: с одной стороны, мы имеем следование мейнстриму, всяким модным словам и чистому коду, с другой стороны, мы имеем практику и реальность, которые всегда диктуют свои правила.

Что делать, если абстракции начинают «подтекать», как воспользоваться фишками языка и что можно выжать из паттерна «спецификация» — смотри под катом.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 3K
Комментарии 19

Ускоряемся в Entity Framework Core

.NET *C# *
Из песочницы

Не будь жадиной!


При выборке данных выбирать нужно ровно столько сколько нужно за один раз. Никогда не извлекайте все данные из таблицы!

Неправильно:

using var ctx = new EFCoreTestContext(optionsBuilder.Options);                
// Мы возвращаем колонку ID с сервера, но никогда не используем и это неправильно!
ctx.FederalDistricts.Select(x=> new { x.ID, x.Name, x.ShortName }).ToList();

Правильно:

using var ctx = new EFCoreTestContext(optionsBuilder.Options);  
// Мы не возвращаем колонку ID с сервера и это правильно!
ctx.FederalDistricts.Select(x=> new { x.Name, x.ShortName }).ToList();
ctx.FederalDistricts.Select(x => new MyClass { Name = x.Name, ShortName = x.ShortName }).ToList();

Читать дальше →
Всего голосов 14: ↑9 и ↓5 +4
Просмотры 42K
Комментарии 42

EF Core + Oracle: как сделать миграции идемпотентными

Блог компании CUSTIS Oracle *.NET *SQL *C# *


Обычно фреймворк EF Core используют в сочетании с MS SQL — другим продуктом Microsoft. Однако это не догма. Например, мы в CUSTIS пишем бизнес-логику на C#, а для управления базами данных используем Oracle. В EF Core есть замечательный механизм миграций, но в нашем случае они не идемпотентны. Дело в том, что Oracle и ряд других БД, например MySQL, не поддерживают транзакционный DDL. Значит, если миграция упадет где-то посередине, ее не получится ни накатить, ни откатить. Как же реализовать идемпотентные миграции на EF Core без MS SQL?
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 2.9K
Комментарии 2

Roslyn & EF Core: конструируем DbContext в runtime

.NET *C# *

Entity Framework Core может генерировать код моделей и DbContext для существующей базы данных с помощью консольной команды dotnet ef dbcontext scaffold. Почему бы нам не попробовать сгенерировать DbContext в runtime?


В статье я расскажу как в runtime в своём приложении:


  1. Сгенерировать код DbContext с помощью EF Core.
  2. Скомпилировать его в памяти с помощью Roslyn.
  3. Загрузить полученную сборку.
  4. Создать экземпляр сгенерированного DbContext.
  5. Работать с базой данных через полученный DbContext.

Пример доступен на github.

Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 4.3K
Комментарии 16

Полезные приемы для работы с EntityFramework Core

Программирование *.NET *
Всем привет.

Я недавно обнаружил, что не все, кто работают с EF, умеют его готовить. Более того, не горят желанием разбираться. Сталкиваются с проблемами на самых ранних этапах — настройке.
Даже после успешной настройки появляются проблемы с запросами данных. Не потому, что люди не знают LINQ, а потому что не все можно смаппить из объектов в реляционные модели. Потому что работая с линком люди думают таблицами. Рисуют SQL запросы и пытаются перевести их в LINQ.

Об этом и, возможно, о чем-то еще я и хочу поговорить в статье.
Читать дальше →
Всего голосов 7: ↑1 и ↓6 -5
Просмотры 5.4K
Комментарии 17

Tree Structure in EF Core: How to configure a self-referencing table and use it

.NET *C# *
Tutorial

One of the very common questions I am getting from .NET community is how to configure and use the tree structures in EF Core. This story is one of the possible ways to do it.


The common tree structures are file tree, categories hierarchy, and so on. Let it be folders tree for example. The entity class will be a Folder:


public class Folder
{
    public Guid Id { get; set; }
    public string Name { get; set; }      
    public Folder Parent { get; set; }
    public Guid? ParentId { get; set; }
    public ICollection<Folder> SubFolders { get; } = new List<Folder>();
}
Read more →
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 13K
Комментарии 1

Нюансы при работе с EF миграциями

.NET *

Данная статья не является инструкцией по работе с EF миграциями. Здесь я собрал несколько скользких моментов и попытки их обойти. Давайте начнем!

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 4K
Комментарии 10

Cоздание переиспользуемых Linq фильтров (построителей предикатов для Where), которые можно применять для разных типов

Программирование *.NET *C# *
Tutorial

Способ создания переиспользуемых Linq фильтров (построителе предикатов для условия Where), которые можно применять для разных типов объектов. Поля объектов для фильтрации указываются с помощью MemberExpression.

Способ подходит для Entity Framework, включая Async операции.

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 3.1K
Комментарии 5

Конфигурация сущностей в EF Core

.NET *C# *

Почти каждый (ну или почти каждый) разработчик слышал про такую технологию программирования, как ORM (англ. Oblect-Relational Mapping) или, если по-русски - объектно-реляционное отображение. Данная технология связывает базы данных с концепциями объектно-ориентированного программирования и, благодаря ей, многие разработчики уже стали забывать о работе с базами данных в чистом виде, например, создавая структуру данных непосредственно в СУБД.
Платформа .NET имеет кросплатформенную реализацию технологии ORM - Entity Framework Core (далее EF Core). С помощью данной технологии мы в принципе можем абстрагироваться от особенностей работы конкретной СУБД и в большинстве случаев, не подвергая модификации код нашего продукта перейти на любую другую СУБД.
Существует несколько вариантов конфигурирования сущностей, о которых мы и будем говорить в данной статье.

Дальнейшее рассмотрение способов конфигурирования подразумевает, что Вы уже знакомы с EF Core и можете поднять самый простой проект работающий с СУБД, использующий данную технологию.
Итак, давайте рассмотрим способы, как можно сконфигурировать сущности и отношения между ними.

Читать далее
Всего голосов 5: ↑2 и ↓3 -1
Просмотры 4.2K
Комментарии 23

Интервью с Джереми Ликнессом о Entity Framework Core

Блог компании OTUS .NET *
Перевод

Entity Framework (EF) Core — это опенсорсная кроссплатформенная расширяема технология доступа к базам данных (ORM) для .NET. Ее релиз состоялся в 2016 году вместе с первыми версиями .NET Core и ASP.NET Core — одним из самых важных шагов Microsoft в рамках вывода .NET в мир открытого исходного кода. С тех пор EF Core не прекращала развиваться вместе с .NET Core, достигнув своей нынешней формы: мощного и легковесного .NET ORM. 

InfoQ взял интервью у Джереми Ликнесса, руководителя группы проектов .NET Data в Microsoft, целью которого было узнать больше об EF Core и о том, что нам следует ожидать в следующем релизе, который намечен на конец этого года.

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 3.6K
Комментарии 0
1