Die Fehlermeldung entsteht, wenn man bei Asp.net Core 2 MVC
eine Anwendung mit EF Entity Framework erweitern möchte.
Sobald man die Migration startet, kommt der Feher:
No DbContext was found in assembly
|
Fehler Meldung in der Package Manager Console
PM> add-migration 01Start
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
User profile is available. Using
'C:\Users\Raimund\AppData\Local\ASP.NET\DataProtection-Keys' as key repository
and Windows DPAPI to encrypt keys at rest.
No DbContext
was found in assembly 'ArtikelWeb'. Ensure that you're using the correct
assembly and that the type is neither abstract nor generic.
|
Lösung:
Man muss eine DbContext Klasse unter Models erstellen,
welche die Tabellen zur äußeren SQL Server Datenbank darstellt.
In Entity Framework wird die Datenbank als DbContext
bezeichnet und DbSet sind die Tabellen.
Dabei muss der Text myWebApp_
an den Namen der eigenen Anwendung angepasst werden
public class DbContext_Model
{
public class MyWebApp_Context : DbContext
{
public myWebApp_Context(DbContextOptions< myWebApp_Context>
options)
: base(options)
{ }
public
DbSet<Products > Products { get; set; }
}
}
|
Hierzu muss man die Zeile EntityFrameworkCore bei Asp.Net
Core einfügen
using Microsoft.EntityFrameworkCore;
|
Im Verzeichnis /Models
Dann fügt man die Datenbank-Verbindung der Startup.cs Datei
hinzu
Eintrag der Connection in den Abschnitt ConfigureServices.
Die Bezeichnung myWebApp muss dabei auf den Namen der
eigenen Anwendung angepasst werden
public void
ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var connection = @"Server=(localdb)\mssqllocaldb;Database=myWebApp;Trusted_Connection=True;";
services.AddDbContext<myWebApp_Context>(options
=> options.UseSqlServer(connection));
}
|
Und im Importbereich von Startup.cs muss man einen Verweis
zum Verzeichnis .Models und einen Verweis zu DbContrext-Datei hinzufügen
using
test_EF_Core2.Models;
using
Microsoft.EntityFrameworkCore;
using static
test_EF_Core2.Models.DbContext_Model;
|
Bevor man die Anwendung mit EF Entity Framework migrieren
kann, muss man in den Model-Klassen / Tabllen noch jeweil einen Primary Key
setzen.
Hier zu setzt man die Attibut-Zeile [Key] vor den Feld-Eintrag,
welcher die ID-Spalte darstellt.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace test_EF_Core2.Models
{
public class Products
{
[Key]
public int IDProduct { get; set; }
public string Title { get; set; }
}
}
|
Migration und Übertragen
aus SQL Server
# Code First
Erster Schritt… die Migration erstellen
PM> Add-Migration InitialCreate
|
Dadurch wird ein Verzeichnis /Migrations erstellt und die aktuelle
Migrations-Datei nach Datum_Name.cs hinzugefügt
Und dann überträgt man die Struktur zum SQL Server mit:
Datenbank in SQL-Server
Der SQL Server Object Explorer ist in Visual Studio
vorinstalliert und befindet sich bei Menü->View->SQL Server Object
Explorer.
Wenn man dann auf SQL Server->(localdb)->Databases die
Datenbanken auflistet, dann findet man die namentlich gleiche Datenbank im
Verzeichnis.
Wichtig ist dabei, dass in den Tabellen jeweils ein
primarykey übernommen wurde.
Die Anweisung PM>Update Database erstellt somit die
korrekten SQL Server Transscript Dateien auf dem SQL Server.
Mit dem passenden T-SQL script.
CREATE TABLE [dbo].[Products] (
[IDProduct] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED ([IDProduct] ASC)
);
|
Das ist deshalb so wichtig, dass beim Eintragen von neuen
Datensätzen die ID eindeutig hochgezählt wird und somit eine schnelle und
eindeutige Struktur vorhanden ist.
Video Tutorial zur Lösung
https://www.youtube.com/watch?v=Ng_8uMdsqps