Entity Framework Core учебник
Начало работы с ядром Entity Framework
Поиск…
замечания
Ядро Entity Framework (EF) Core - это легкая и расширяемая версия популярной технологии доступа к данным Entity Framework.
EF Core - объектно-реляционный картограф (O / RM), который позволяет разработчикам .NET работать с базой данных с использованием объектов .NET. Это устраняет необходимость в большей части кода доступа к данным, который разработчикам обычно приходится писать.
Добавление пакетов в проект
Чтобы добавить EntityFrameworkCore в ваш проект, обновите файл project.json (добавьте новые строки в разделы dependencies и tools ):
"dependencies": {
...
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Design": {
"version": "1.0.0",
"type": "build"
},
},
"tools": {
...
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
}
Не забудьте запустить dotnet restore чтобы загрузить эти пакеты из Интернета.
Если вы используете СУРБД, Npgsql.EntityFrameworkCore.PostgreSQL от Microsoft SQLServer, замените Microsoft.EntityFrameworkCore.SqlServer с правильной версией ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL или другой - обратитесь к документации по РСУБД для рекомендуемого пакета).
База данных First in Entity Framework Core с библиотекой классов и SQL Server
Хорошо, мне потребовался день, чтобы понять это, поэтому здесь я публикую шаги, которые я выполнил, чтобы получить мою базу данных, впервые работающую в Class Project (.NET Core) , с .NET Core Web App.
Шаг 1 - Установите .NET Core
Убедитесь, что вы используете .NET Core, а не DNX (Hint: You should be able to see the .NET Core option when creating a New Project) - если NOT Download from Here
Если у вас возникли проблемы с установкой .NET Core (ошибка - это что-то вроде обновления Visual Studio 2015 Update 3 не установлена правильно). Вы можете запустить установку с помощью команды: [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] - Это предотвратит установку, выполняемую Visual Studio Check Github Issue
Шаг 2 - Создание проектов
Создайте новое веб-приложение ASP.NET Core -> Затем выберите веб-приложение на следующем экране
Добавить проект Class Library (.NET Core)
Шаг 3 - Установка пакетов EF
Откройте файл project.json библиотеки классов и вставьте следующее, затем сохраните файл:
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"NETStandard.Library": "1.6.0"
},
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"net46": {
},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-*"
}
}
}
}
}
Это должно восстановить пакеты в разделе « References
---------------- ИЛИ ЖЕ
Вы можете установить их с помощью Nuget Package Manager, выполнив следующие команды в консоли диспетчера пакетов
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
Примечание. Установите один пакет за раз - если вы получили сообщение об ошибке после установки
Microsoft.EntityFrameworkCore.Tools
Затем измените содержимое раздела project.json frameworks на следующее:
"frameworks": {
"net46": {
},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-*"
}
}
}
}
Шаг 4 - Создание модели базы данных
Теперь для создания базы данных выполните следующую команду в Package Manager Console (НЕ забывайте изменить строку подключения в своей базе данных)
Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer
Это даст вам ошибку о стартовом проекте:
Для этого вам нужно добавить те же ссылки, которые вы добавили в Class Library, в .NET Web App
Поэтому откройте свой project.json для веб-приложения,
В dependencies добавьте:
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
и под tools добавить:
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
После внесения изменений Сохраните файл.
Это то, что выглядит мой project.json
Затем снова запустите команду в консоли диспетчера пакетов против библиотеки классов:
Если вы еще не добавили ссылку на свою библиотеку классов в веб-приложение, вы получите эту ошибку:
для решения этой дополнительной ссылки вашей библиотеки классов на ваше веб-приложение:
в заключение
Запустите команду еще раз - в Package Manager Console :
Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Это должно создать объекты в папке моделей, в библиотеке классов
Передача строки соединения
В моем случае здесь у нас есть приложение Multi Tenant, в котором каждый клиент имеет свою собственную базу данных, например Client_1, Client_2, Client_3. Поэтому строка подключения должна быть динамической.
Таким образом, мы добавили свойство строки соединения в конструктор и передали его в контекст в методе OnConfiguring
public partial class ClientContext
{
private readonly string _connectionString;
public ClientContext(string connectionString) : base()
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
}
и использовал его так:
public void TestConnection()
{
var clientId = 1;
var connectionString = string.Format("Server=192.168.0.211; Database=Client_{0}; user id= USER; password = PWD;", clientId);
using (var clientContext = new ClientContext(connectionString))
{
var assets = clientContext.Users.Where(s => s.UserId == 1);
}
}
Модель, запрос и сохранение данных
модель
С EF Core доступ к данным осуществляется с использованием модели. Модель состоит из классов сущностей и производного контекста, представляющего сеанс с базой данных, позволяющий запрашивать и сохранять данные.
Вы можете создать модель из существующей базы данных, указать код модели для вашей базы данных или использовать EF Migrations для создания базы данных из вашей модели (и ее эволюцию по мере изменения вашей модели с течением времени).
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
namespace Intro
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
Запрос
Экземпляры классов сущностей извлекаются из базы данных с помощью Language Integrated Query (LINQ).
using (var db = new BloggingContext())
{
var blogs = db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToList();
}
Сохранение данных
Данные создаются, удаляются и изменяются в базе данных с использованием экземпляров ваших классов сущностей.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
db.SaveChanges();
}
Удаление данных
Экземпляры классов сущностей извлекаются из базы данных с помощью Language Integrated Query (LINQ).
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Attach(blog);
db.Blogs.Remove(blog);
db.SaveChanges();
}
Обновление данных
Данные обновляются в базе данных с использованием экземпляров классов сущностей.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
var entity = db.Blogs.Find(blog);
entity.Url = "http://sample2.com";
db.SaveChanges();
}








