Sök…


Anmärkningar

Entity Framework (EF) Core är en lätt och utdragbar version av den populära datatillgångstekniken för Entity Framework.

EF Core är en objektrelational mapper (O / RM) som gör det möjligt för .NET-utvecklare att arbeta med en databas med hjälp av .NET-objekt. Det eliminerar behovet av de flesta av datatillgångskoden som utvecklare vanligtvis behöver skriva.

Lägga till paket till projektet

För att lägga till EntityFrameworkCore till ditt projekt uppdaterar project.json filen project.json (lägg till nya rader i avsnitten dependencies och 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"
}

Glöm inte att köra dotnet restore att faktiskt ladda ner dessa paket från internet.

Om du använder en annan RDBMS än Microsoft SQLServer - ersätt Microsoft.EntityFrameworkCore.SqlServer med rätt version ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL eller annat - konsultera din RDBMS-dokumentation för det rekommenderade paketet).

Databas först i enhetsramkärnan med ett klassbibliotek och SQL-server

Okej det tog mig ungefär en dag att ta reda på det så här lägger jag ut de stegen jag följde för att få min databas först att arbeta i ett Class Project (.NET Core) , med en .NET Core Web App.

Steg 1 - Installera .NET Core

Se till att du använder .NET Core inte DNX (Hint: You should be able to see the .NET Core option when creating a New Project) - Om INTE laddas ner härifrån

Om du har problem med att installera .NET Core (Fel är något som Visual Studio 2015 Update 3 inte korrekt installerat) - Du kan köra installationen med kommandot: [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] - Vilket förhindrar installationen av Visual Studio Check Github-frågan

ange bildbeskrivning här

Steg 2 - Skapa projekten

Skapa en ny ASP.NET Core webbapplikation -> Välj sedan webbapplikation i nästa skärm

ange bildbeskrivning här

Lägg till ett Class Library (.NET Core) -projekt

ange bildbeskrivning här

Steg 3 - Installera EF-paket

Öppna din project.json fil i Class Library och klistra in följande och spara sedan filen:

{
  "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-*"
        }
      }
    }
  }
}

Detta bör återställa paketen under References

ange bildbeskrivning här

---------------- ELLER

Du kan installera dem med Nuget Package Manager genom att köra följande kommandon i Package Manager Console

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Obs! Installera ett paket i taget - om du får ett fel efter installationen

Microsoft.EntityFrameworkCore.Tools

project.json innehållet i ditt project.json till detta:

  "frameworks": {
    "net46": {
    },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
    }
  }

Steg 4 - Skapa databasmodellen

För att generera databasen, kör följande kommando i Package Manager Console (Glöm inte att ändra anslutningssträngen till din databas)

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer

Detta kommer att ge dig felet om startprojekt:

ange bildbeskrivning här

För detta måste du lägga till samma referenser som du lagt till i Class Library till. NET Web App

Så öppna ditt project.json för project.json ,

Lägg till under dependencies :

"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

och under tools lägg till:

"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

Spara filen efter att ha gjort ändringarna.

Så här ser mitt projekt.json ut

ange bildbeskrivning här

Kör sedan igen kommandot i Package Manager Console mot klassbiblioteket:

Om du inte redan har lagt till referensen för ditt klassbibliotek i webbappen kommer du att få det här felet:

ange bildbeskrivning här

för att lösa detta lägg till referens till ditt klassbibliotek till din webbapp:

ange bildbeskrivning här

Till sist

Kör kommandot igen - i Package Manager Console :

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Detta bör skapa enheter under mappen Modeller i klassbiblioteket

ange bildbeskrivning här

Passera en anslutningssträng

I mitt fall här har vi en Multi Tenant-applikation, där varje klient har sin egen databas, t.ex. Client_1, Client_2, Client_3. Så anslutningssträngen måste vara dynamisk.

Så vi lägger till en anslutningsträngegenskap till en konstruktör och överförde den till Context i OnConfiguring metoden

public partial class ClientContext
{
    private readonly string _connectionString;

    public ClientContext(string connectionString) : base()
    {
        _connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(_connectionString);
    }
}

och använde det så här:

    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);
        }
    }

Modell, fråga och spara data

Modell

Med EF Core utförs datatillgång med en modell. En modell består av entitetsklasser och en härledd kontext som representerar en session med databasen, så att du kan fråga och spara data.

Du kan skapa en modell från en befintlig databas, handkoda en modell för att matcha din databas eller använda EF Migrations för att skapa en databas från din modell (och utveckla den när din modell förändras över tid).

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; }
    }
}

att fråga

Instanser av dina entitetsklasser hämtas från databasen med hjälp av Language Integrated Query (LINQ).

using (var db = new BloggingContext())
{
    var blogs = db.Blogs
        .Where(b => b.Rating > 3)
        .OrderBy(b => b.Url)
        .ToList();
}

Spara data

Data skapas, raderas och modifieras i databasen med hjälp av instanser av dina entitetsklasser.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Add(blog);
    db.SaveChanges();
}

Ta bort data

Instanser av dina entitetsklasser hämtas från databasen med hjälp av 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();
}

Uppdatering av data

Data uppdateras i databasen med hjälp av instanser av dina entitetsklasser.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow