Поиск…


замечания

Ядро 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();
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow