Введение

Если вы новичок в Entity Framework, вы можете узнать из этого блога о некоторых основных полезных функциях.

Инструкции по началу использования Entity Framework и выполнению первой миграции кода см. в моем предыдущем блоге.

Как я упоминал ранее, использование Entity Framework (EF) может значительно облегчить жизнь разработчика программного обеспечения, на мой взгляд, это особенно верно, если вы используете подход «сначала код».

Чтобы фреймворк охватывал те же функции, что и при непосредственном взаимодействии с базой данных, он должен позволять вам переопределять соглашения по умолчанию, это достигается с помощью аннотаций данных в атрибутах. Я покажу примеры наиболее распространенных аннотаций данных и способы их использования, а также покажу более простой способ запроса базы данных с помощью LINQ (Language Integrated Query).

Пример обзора проекта

Пример, который я сделал, — это книжный магазин с базовой базой данных для взаимодействия. Это ЭРД.

Обратите внимание, что все таблицы имеют поле Id, за исключением таблицы BookRentals, потому что она имеет составной первичный ключ, состоящий из BookId и CustomerId.

EF предоставляет соглашение по умолчанию, согласно которому любой атрибут «Id» становится первичным ключом (PK) и автоматически инкрементным.

Другое соглашение заключается в том, что EF делает любой строковый атрибут обнуляемым и по умолчанию имеет длину 255. Я покажу вам, как переопределить это.

Аннотации данных

Первое, что вам нужно сделать, это импортировать эти две библиотеки в любой класс, где вам нужно использовать аннотации данных:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

Теперь вы можете начать использовать аннотации данных.

Создание составного ПК

Помните из моего последнего блога, что вы можете сообщить EF, что у вас есть внешний ключ (FK), имея объект класса FK, в данном случае один для Book и один для Customer.

Мы также должны специально создать атрибуты BookId и CustomerId, чтобы использовать их в качестве нашего составного PK. Если у вас есть только FK, который не является вашим ПК, необходим только объект, и EF создаст столбец в таблице для связи с FK.

Важно, чтобы вы назвали PK BookId или Book_Id (или эквивалент), потому что, если он назван по-другому (например, IdBook), EF не будет читать его как FK и создаст другой столбец в вашей таблице.

Аннотации данных, необходимые для составного ПК: [Ключ], это указывает только на ПК и может использоваться в несоставном ПК, и [Столбец (порядок = 1/2)], это указывает на то, что есть два ПК и что порядок их.

PK без автоматического инкремента

Это так просто, как кажется, просто предоставив [DatabaseGenerated(DatabaseGeneratedOption.None)], вы указываете EF, чтобы сделать PK неавтоматически инкрементным.

Атрибут нельзя обнулить

Чтобы сделать любое поле необнуляемым, просто добавьте аннотацию данных [Required].

Переопределить соглашения о строках

Этот атрибут переопределяет допустимое значение NULL по умолчанию для строк, а также явно указывает длину поля [MaxLength(50)] и дает столбцу имя в базе данных, отличное от имени в атрибуте, а также определенный тип данных. [Column("FullName", TypeName = "varchar")], по умолчанию строки сопоставляются с nvarchar, и мы переопределяем это соглашение, чтобы сопоставить этот атрибут с varchar.

LINQ

Этот язык запросов позволяет выполнять все типы запросов, которые можно выполнять с помощью SQL, но более простым способом из кода C#. Я покажу несколько основных примеров.

Выбор книг по состоянию и порядку

SQL

SELECT * FROM Books WHERE Id > 1 ORDER BY Title asc, Author desc

LINQ

var books2 =
     from b in context.Books
     where b.Id > 1
     orderby b.Title, b.Author descending
     select b;

Выберите книги и жанр с помощью объединения

SQL

SELECT b.Title, g.Name FROM Books b
JOIN Genres g on b.Genre_Id = g.Id

LINQ

var bookGenres =
     context.Genres.Join(context.Books,
     g => g.Id,
     b => b.Genre.Id,
     (genre, book) =>
     new { BookTitle = book.Title, GenreName = genre.Name });

Вставка книги

LINQ

Book book = new Book();
book.Title = "New Book";
book.Price = 30;
book.Genre = context.Genres.SingleOrDefault(g => g.Id == 1);
book.Author = "The Author";
context.Books.Add(book);
context.SaveChanges();

Удаление книги

var book = context.Books.SingleOrDefault(b => b.Id == 6);
context.Books.Remove(book);
context.SaveChanges();

Вывод

Теперь вы готовы создать свою первую базу данных из своего кода и манипулировать ею по мере необходимости.

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

использованная литература

https://www.udemy.com/entity-framework-tutorial/