This tutorial guides you through the process of creating a simple application powered by Entity Framework Core. This application will create tables in the database based on the model in run-time, fill them with sample data, and execute queries.
This tutorial is for Full .NET Framework. For .NET Core see Entity Framework Core Code-First Tutorial for .NET Core.
If you want to target Entity Framework Core 3.1, this tutorial requires the following:
If you want to target Entity Framework Core 2.2, this tutorial requires the following:
If you want to target Entity Framework Core 1.1, this tutorial requires the following:
Note that Entity Framework support is available only in Professional and Developer Editions of dotConnect for Oracle.
Install-Package Microsoft.EntityFrameworkCore.Relational
Additionally you need to add references to the following assemblies to your project:
Please note that there are two versions of Devart.Data.Oracle.Entity.EFCore.dll assemblies - for Entity Framework Core 2.0 and for Entity Framework Core 1.1. The first is located in the \Entity\EFCore2 subfolder of the dotConnect for Oracle installation folder, and the second one - in the \Entity\EFCore subfolder.
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
public class MyDbContext : DbContext {
 
}
Imports Microsoft.EntityFrameworkCore Imports System.Collections.Generic Imports System.ComponentModel.DataAnnotations Imports System.ComponentModel.DataAnnotations.Schema Imports System.Data Imports System.IO Imports System.Linq Imports System.Text Imports System.Threading.Tasks Public Class MyDbContext Inherits DbContext End Class
public class MyDbContext : DbContext {
 
  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
     optionsBuilder.UseOracle(@"User Id=Scott;Password=tiger;Data Source=Ora;");
  } 
}
Public Class MyDbContext
	Inherits DbContext
	Protected Overrides Sub OnConfiguring(optionsBuilder As DbContextOptionsBuilder)
		optionsBuilder.UseOracle("User Id=Scott;Password=tiger;Data Source=Ora;")
	End Sub
End Class
Create entity classes, used in the model. If necessary, set DataAnnotation attributes for the classes and properties.
 Show/Hide code
  [Table("Product")]
  public class Product {
 
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long ProductID { get; set; }
 
    [Required]
    [MaxLength(50)]
    public string ProductName { get; set; }
 
    public string UnitName { get; set; }
    public int UnitScale { get; set; }
    public long InStock { get; set; }
    public double Price { get; set; }
    public double DiscontinuedPrice { get; set; }
 
    public virtual ProductCategory Category { get; set; }
    public virtual ICollection<OrderDetail> OrderDetails { get; set; }
  }
 
  [Table("ProductCategory")]
  public class ProductCategory {
 
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long CategoryID { get; set; }
 
    [Required]
    [MaxLength(20)]
    public string CategoryName { get; set; }
 
    public virtual ProductCategory ParentCategory { get; set; }
    public virtual ICollection<ProductCategory> ChildCategories { get; set; }
    public virtual ICollection<Product> Products { get; set; }
  }
 
  [Table("Order Details")]
  public class OrderDetail {
 
    [Column(Order = 1)]
    public long OrderID { get; set; }
 
    [Column(Order = 2)]
    public long ProductID { get; set; }
 
    public double Price { get; set; }
    public double Quantity { get; set; }
 
    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
  }
 
  [Table("Orders")]
  public class Order {
 
    public Order() {
 
      OrderDate = DateTime.Now;
    }
 
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long OrderID { get; set; }
 
    [Required]
    public DateTime OrderDate { get; set; }
 
    public double Freight { get; set; }
    public DateTime? ShipDate { get; set; }
    public Double Discount { get; set; }
 
    public virtual ICollection<OrderDetail> OrderDetails { get; set; }
 
    [InverseProperty("Orders")]
    public virtual PersonContact PersonContact { get; set; }
 
    public virtual Company Company { get; set; }
 
    public virtual Company ShipCompany { get; set; }
  }
 
  [Table("Company")]
  public class Company {
 
    public Company() {
    }
 
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long CompanyID { get; set; }
 
    [Required]
    [MaxLength(40)]
    public string CompanyName { get; set; }
 
    [MaxLength(100)]
    public string Web { get; set; }
 
    [MaxLength(50)]
    public string Email { get; set; }
 
    public virtual AddressType Address { get; set; }
 
    [InverseProperty(nameof(Order.Company))]
    public virtual ICollection<Order> Orders { get; set; }
 
    [InverseProperty(nameof(Order.ShipCompany))]
    public virtual ICollection<Order> ShippedOrders { get; set; }
 
    [InverseProperty(nameof(PersonContact.Companies))]
    public virtual PersonContact PrimaryContact { get; set; }
 
    [InverseProperty(nameof(PersonContact.Company))]
    public virtual ICollection<PersonContact> Contacts { get; set; }
 
  }
 
  [Table("Person Contact")]
  public class PersonContact {
 
    public PersonContact() {
    }
 
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long ContactID { get; set; }
 
    [MaxLength(8)]
    public string Title { get; set; }
 
    [MaxLength(50)]
    public string FirstName { get; set; }
 
    [MaxLength(50)]
    public string MiddleName { get; set; }
 
    [MaxLength(50)]
    public string LastName { get; set; }
 
    [MaxLength(25)]
    public string HomePhone { get; set; }
 
    [MaxLength(25)]
    public string MobilePhone { get; set; }
 
    public virtual AddressType Address { get; set; }
 
    public virtual ICollection<Order> Orders { get; set; }
    public virtual Company Company { get; set; }
    public virtual ICollection<Company> Companies { get; set; }
  }
 
  [Table("AddressType")]
  public class AddressType {
 
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
 
    [MaxLength(120)]
    public string AddressTitle { get; set; }
 
    [MaxLength(60)]
    public string Address { get; set; }
 
    [MaxLength(30)]
    public string City { get; set; }
 
    [MaxLength(20)]
    public string Region { get; set; }
 
    [MaxLength(15)]
    public string PostalCode { get; set; }
 
    [MaxLength(20)]
    public string Country { get; set; }
 
    [MaxLength(25)]
    public string Phone { get; set; }
 
    [MaxLength(25)]
    public string Fax { get; set; }
  }
[Visual Basic]
<Table("Product")> _
Public Class Product
	<Key> _
	<DatabaseGenerated(DatabaseGeneratedOption.Identity)> _
	Public Property ProductID() As Long
		Get
			Return m_ProductID
		End Get
		Set
			m_ProductID = Value
		End Set
	End Property
	Private m_ProductID As Long
	<Required> _
	<MaxLength(50)> _
	Public Property ProductName() As String
		Get
			Return m_ProductName
		End Get
		Set
			m_ProductName = Value
		End Set
	End Property
	Private m_ProductName As String
	Public Property UnitName() As String
		Get
			Return m_UnitName
		End Get
		Set
			m_UnitName = Value
		End Set
	End Property
	Private m_UnitName As String
	Public Property UnitScale() As Integer
		Get
			Return m_UnitScale
		End Get
		Set
			m_UnitScale = Value
		End Set
	End Property
	Private m_UnitScale As Integer
	Public Property InStock() As Long
		Get
			Return m_InStock
		End Get
		Set
			m_InStock = Value
		End Set
	End Property
	Private m_InStock As Long
	Public Property Price() As Double
		Get
			Return m_Price
		End Get
		Set
			m_Price = Value
		End Set
	End Property
	Private m_Price As Double
	Public Property DiscontinuedPrice() As Double
		Get
			Return m_DiscontinuedPrice
		End Get
		Set
			m_DiscontinuedPrice = Value
		End Set
	End Property
	Private m_DiscontinuedPrice As Double
	Public Overridable Property Category() As ProductCategory
		Get
			Return m_Category
		End Get
		Set
			m_Category = Value
		End Set
	End Property
	Private Overridable m_Category As ProductCategory
	Public Overridable Property OrderDetails() As ICollection(Of OrderDetail)
		Get
			Return m_OrderDetails
		End Get
		Set
			m_OrderDetails = Value
		End Set
	End Property
	Private Overridable m_OrderDetails As ICollection(Of OrderDetail)
End Class
<Table("ProductCategory")> _
Public Class ProductCategory
	<Key> _
	<DatabaseGenerated(DatabaseGeneratedOption.Identity)> _
	Public Property CategoryID() As Long
		Get
			Return m_CategoryID
		End Get
		Set
			m_CategoryID = Value
		End Set
	End Property
	Private m_CategoryID As Long
	<Required> _
	<MaxLength(20)> _
	Public Property CategoryName() As String
		Get
			Return m_CategoryName
		End Get
		Set
			m_CategoryName = Value
		End Set
	End Property
	Private m_CategoryName As String
	Public Overridable Property ParentCategory() As ProductCategory
		Get
			Return m_ParentCategory
		End Get
		Set
			m_ParentCategory = Value
		End Set
	End Property
	Private Overridable m_ParentCategory As ProductCategory
	Public Overridable Property ChildCategories() As ICollection(Of ProductCategory)
		Get
			Return m_ChildCategories
		End Get
		Set
			m_ChildCategories = Value
		End Set
	End Property
	Private Overridable m_ChildCategories As ICollection(Of ProductCategory)
	Public Overridable Property Products() As ICollection(Of Product)
		Get
			Return m_Products
		End Get
		Set
			m_Products = Value
		End Set
	End Property
	Private Overridable m_Products As ICollection(Of Product)
End Class
<Table("Order Details")> _
Public Class OrderDetail
	<Column(Order := 1)> _
	Public Property OrderID() As Long
		Get
			Return m_OrderID
		End Get
		Set
			m_OrderID = Value
		End Set
	End Property
	Private m_OrderID As Long
	<Column(Order := 2)> _
	Public Property ProductID() As Long
		Get
			Return m_ProductID
		End Get
		Set
			m_ProductID = Value
		End Set
	End Property
	Private m_ProductID As Long
	Public Property Price() As Double
		Get
			Return m_Price
		End Get
		Set
			m_Price = Value
		End Set
	End Property
	Private m_Price As Double
	Public Property Quantity() As Double
		Get
			Return m_Quantity
		End Get
		Set
			m_Quantity = Value
		End Set
	End Property
	Private m_Quantity As Double
	Public Overridable Property Product() As Product
		Get
			Return m_Product
		End Get
		Set
			m_Product = Value
		End Set
	End Property
	Private Overridable m_Product As Product
	Public Overridable Property Order() As Order
		Get
			Return m_Order
		End Get
		Set
			m_Order = Value
		End Set
	End Property
	Private Overridable m_Order As Order
End Class
<Table("Orders")> _
Public Class Order
	Public Sub New()
		OrderDate = DateTime.Now
	End Sub
	<Key> _
	<DatabaseGenerated(DatabaseGeneratedOption.Identity)> _
	Public Property OrderID() As Long
		Get
			Return m_OrderID
		End Get
		Set
			m_OrderID = Value
		End Set
	End Property
	Private m_OrderID As Long
	<Required> _
	Public Property OrderDate() As DateTime
		Get
			Return m_OrderDate
		End Get
		Set
			m_OrderDate = Value
		End Set
	End Property
	Private m_OrderDate As DateTime
	Public Property Freight() As Double
		Get
			Return m_Freight
		End Get
		Set
			m_Freight = Value
		End Set
	End Property
	Private m_Freight As Double
	Public Property ShipDate() As System.Nullable(Of DateTime)
		Get
			Return m_ShipDate
		End Get
		Set
			m_ShipDate = Value
		End Set
	End Property
	Private m_ShipDate As System.Nullable(Of DateTime)
	Public Property Discount() As [Double]
		Get
			Return m_Discount
		End Get
		Set
			m_Discount = Value
		End Set
	End Property
	Private m_Discount As [Double]
	Public Overridable Property OrderDetails() As ICollection(Of OrderDetail)
		Get
			Return m_OrderDetails
		End Get
		Set
			m_OrderDetails = Value
		End Set
	End Property
	Private Overridable m_OrderDetails As ICollection(Of OrderDetail)
	<InverseProperty("Orders")> _
	Public Overridable Property PersonContact() As PersonContact
		Get
			Return m_PersonContact
		End Get
		Set
			m_PersonContact = Value
		End Set
	End Property
	Private Overridable m_PersonContact As PersonContact
	Public Overridable Property Company() As Company
		Get
			Return m_Company
		End Get
		Set
			m_Company = Value
		End Set
	End Property
	Private Overridable m_Company As Company
	Public Overridable Property ShipCompany() As Company
		Get
			Return m_ShipCompany
		End Get
		Set
			m_ShipCompany = Value
		End Set
	End Property
	Private Overridable m_ShipCompany As Company
End Class
<Table("Company")> _
Public Class Company
	Public Sub New()
	End Sub
	<Key> _
	<DatabaseGenerated(DatabaseGeneratedOption.Identity)> _
	Public Property CompanyID() As Long
		Get
			Return m_CompanyID
		End Get
		Set
			m_CompanyID = Value
		End Set
	End Property
	Private m_CompanyID As Long
	<Required> _
	<MaxLength(40)> _
	Public Property CompanyName() As String
		Get
			Return m_CompanyName
		End Get
		Set
			m_CompanyName = Value
		End Set
	End Property
	Private m_CompanyName As String
	<MaxLength(100)> _
	Public Property Web() As String
		Get
			Return m_Web
		End Get
		Set
			m_Web = Value
		End Set
	End Property
	Private m_Web As String
	<MaxLength(50)> _
	Public Property Email() As String
		Get
			Return m_Email
		End Get
		Set
			m_Email = Value
		End Set
	End Property
	Private m_Email As String
	Public Overridable Property Address() As AddressType
		Get
			Return m_Address
		End Get
		Set
			m_Address = Value
		End Set
	End Property
	Private Overridable m_Address As AddressType
	<InverseProperty(nameof(Order.Company))> _
	Public Overridable Property Orders() As ICollection(Of Order)
		Get
			Return m_Orders
		End Get
		Set
			m_Orders = Value
		End Set
	End Property
	Private Overridable m_Orders As ICollection(Of Order)
	<InverseProperty(nameof(Order.ShipCompany))> _
	Public Overridable Property ShippedOrders() As ICollection(Of Order)
		Get
			Return m_ShippedOrders
		End Get
		Set
			m_ShippedOrders = Value
		End Set
	End Property
	Private Overridable m_ShippedOrders As ICollection(Of Order)
	<InverseProperty(nameof(PersonContact.Companies))> _
	Public Overridable Property PrimaryContact() As PersonContact
		Get
			Return m_PrimaryContact
		End Get
		Set
			m_PrimaryContact = Value
		End Set
	End Property
	Private Overridable m_PrimaryContact As PersonContact
	<InverseProperty(nameof(PersonContact.Company))> _
	Public Overridable Property Contacts() As ICollection(Of PersonContact)
		Get
			Return m_Contacts
		End Get
		Set
			m_Contacts = Value
		End Set
	End Property
	Private Overridable m_Contacts As ICollection(Of PersonContact)
End Class
<Table("Person Contact")> _
Public Class PersonContact
	Public Sub New()
	End Sub
	<Key> _
	<DatabaseGenerated(DatabaseGeneratedOption.Identity)> _
	Public Property ContactID() As Long
		Get
			Return m_ContactID
		End Get
		Set
			m_ContactID = Value
		End Set
	End Property
	Private m_ContactID As Long
	<MaxLength(8)> _
	Public Property Title() As String
		Get
			Return m_Title
		End Get
		Set
			m_Title = Value
		End Set
	End Property
	Private m_Title As String
	<MaxLength(50)> _
	Public Property FirstName() As String
		Get
			Return m_FirstName
		End Get
		Set
			m_FirstName = Value
		End Set
	End Property
	Private m_FirstName As String
	<MaxLength(50)> _
	Public Property MiddleName() As String
		Get
			Return m_MiddleName
		End Get
		Set
			m_MiddleName = Value
		End Set
	End Property
	Private m_MiddleName As String
	<MaxLength(50)> _
	Public Property LastName() As String
		Get
			Return m_LastName
		End Get
		Set
			m_LastName = Value
		End Set
	End Property
	Private m_LastName As String
	<MaxLength(25)> _
	Public Property HomePhone() As String
		Get
			Return m_HomePhone
		End Get
		Set
			m_HomePhone = Value
		End Set
	End Property
	Private m_HomePhone As String
	<MaxLength(25)> _
	Public Property MobilePhone() As String
		Get
			Return m_MobilePhone
		End Get
		Set
			m_MobilePhone = Value
		End Set
	End Property
	Private m_MobilePhone As String
	Public Overridable Property Address() As ddressType
		Get
			Return m_Address
		End Get
		Set
			m_Address = Value
		End Set
	End Property
	Private Overridable m_Address As ddressType
	Public Overridable Property Orders() As ICollection(Of Order)
		Get
			Return m_Orders
		End Get
		Set
			m_Orders = Value
		End Set
	End Property
	Private Overridable m_Orders As ICollection(Of Order)
	Public Overridable Property Company() As Company
		Get
			Return m_Company
		End Get
		Set
			m_Company = Value
		End Set
	End Property
	Private Overridable m_Company As Company
	Public Overridable Property Companies() As ICollection(Of Company)
		Get
			Return m_Companies
		End Get
		Set
			m_Companies = Value
		End Set
	End Property
	Private Overridable m_Companies As ICollection(Of Company)
End Class
<Table("AddressType")> _
Public Class AddressType
	<Key> _
	<DatabaseGenerated(DatabaseGeneratedOption.Identity)> _
	Public Property Id() As Long
		Get
			Return m_Id
		End Get
		Set
			m_Id = Value
		End Set
	End Property
	Private m_Id As Long
	<MaxLength(120)> _
	Public Property AddressTitle() As String
		Get
			Return m_AddressTitle
		End Get
		Set
			m_AddressTitle = Value
		End Set
	End Property
	Private m_AddressTitle As String
	<MaxLength(60)> _
	Public Property Address() As String
		Get
			Return m_Address
		End Get
		Set
			m_Address = Value
		End Set
	End Property
	Private m_Address As String
	<MaxLength(30)> _
	Public Property City() As String
		Get
			Return m_City
		End Get
		Set
			m_City = Value
		End Set
	End Property
	Private m_City As String
	<MaxLength(20)> _
	Public Property Region() As String
		Get
			Return m_Region
		End Get
		Set
			m_Region = Value
		End Set
	End Property
	Private m_Region As String
	<MaxLength(15)> _
	Public Property PostalCode() As String
		Get
			Return m_PostalCode
		End Get
		Set
			m_PostalCode = Value
		End Set
	End Property
	Private m_PostalCode As String
	<MaxLength(20)> _
	Public Property Country() As String
		Get
			Return m_Country
		End Get
		Set
			m_Country = Value
		End Set
	End Property
	Private m_Country As String
	<MaxLength(25)> _
	Public Property Phone() As String
		Get
			Return m_Phone
		End Get
		Set
			m_Phone = Value
		End Set
	End Property
	Private m_Phone As String
	<MaxLength(25)> _
	Public Property Fax() As String
		Get
			Return m_Fax
		End Get
		Set
			m_Fax = Value
		End Set
	End Property
	Private m_Fax As String
End Class
public class MyDbContext : DbContext {
 
  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
 
    optionsBuilder.UseOracle(@"User Id=Scott;Password=tiger;Data Source=Ora;");
  }
 
  protected override void OnModelCreating(ModelBuilder modelBuilder) {
 
    modelBuilder.Entity<OrderDetail>()
      .HasKey(p => new { p.OrderID, p.ProductID });
  } 
  
  public DbSet<Product> Products { get; set; }
  public DbSet<ProductCategory> ProductCategories { get; set; }
  public DbSet<OrderDetail> OrderDetails { get; set; }
  public DbSet<Order> Orders { get; set; }
  public DbSet<Company> Companies { get; set; }
  public DbSet<PersonContact> PersonContacts { get; set; }
}
Public Class MyDbContext
	Inherits DbContext
	Protected Overrides Sub OnConfiguring(optionsBuilder As DbContextOptionsBuilder)
		optionsBuilder.UseOracle("User Id=Scott;Password=tiger;Data Source=Ora;")
	End Sub
	Protected Overrides Sub OnModelCreating(modelBuilder As ModelBuilder)
		modelBuilder.Entity(Of OrderDetail)().HasKey(Function(p) New From { _
			p.OrderID, _
			p.ProductID _
		})
	End Sub
	Public Property Products() As DbSet(Of Product)
		Get
			Return m_Products
		End Get
		Set
			m_Products = Value
		End Set
	End Property
	Private m_Products As DbSet(Of Product)
	Public Property ProductCategories() As DbSet(Of ProductCategory)
		Get
			Return m_ProductCategories
		End Get
		Set
			m_ProductCategories = Value
		End Set
	End Property
	Private m_ProductCategories As DbSet(Of ProductCategory)
	Public Property OrderDetails() As DbSet(Of OrderDetail)
		Get
			Return m_OrderDetails
		End Get
		Set
			m_OrderDetails = Value
		End Set
	End Property
	Private m_OrderDetails As DbSet(Of OrderDetail)
	Public Property Orders() As DbSet(Of Order)
		Get
			Return m_Orders
		End Get
		Set
			m_Orders = Value
		End Set
	End Property
	Private m_Orders As DbSet(Of Order)
	Public Property Companies() As DbSet(Of Company)
		Get
			Return m_Companies
		End Get
		Set
			m_Companies = Value
		End Set
	End Property
	Private m_Companies As DbSet(Of Company)
	Public Property PersonContacts() As DbSet(Of PersonContact)
		Get
			Return m_PersonContacts
		End Get
		Set
			m_PersonContacts = Value
		End Set
	End Property
	Private m_PersonContacts As DbSet(Of PersonContact)
End Class
Now let's choose how to create the database. We can generate Code-First Migrations. Or, for test purposes, we can implement the analogue of Entity Framework 6 initialization strategy DropCreateDatabaseAlways.
 Show/Hide code
  public static class MyDbContextSeeder {
 
    public static void Seed(MyDbContext context) {
 
      context.Database.EnsureDeleted();
      context.Database.EnsureCreated();
 
      context.ProductCategories.Add(new ProductCategory() {
        CategoryName = "prose"
      });
      context.ProductCategories.Add(new ProductCategory() {
        CategoryName = "novel"
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "poetry",
        ParentCategory = context.ProductCategories.Local.Single(p => p.CategoryName == "novel")
      });
      context.ProductCategories.Add(new ProductCategory() {
        CategoryName = "detective story"
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "fantasy",
        ParentCategory = context.ProductCategories.Local.Single(p => p.CategoryName == "novel")
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "pop art",
        ParentCategory = context.ProductCategories.Local.Single(p => p.CategoryName == "fantasy")
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "textbook"
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "research book",
        ParentCategory = context.ProductCategories.Local.Single(p => p.CategoryName == "textbook")
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "poem",
        ParentCategory = context.ProductCategories.Local.Single(p => p.CategoryName == "novel")
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "collection",
        ParentCategory = context.ProductCategories.Local.Single(p => p.CategoryName == "textbook")
      });
      context.ProductCategories.Add(new ProductCategory() { 
        CategoryName = "dictionary",
        ParentCategory = context.ProductCategories.Local.Single(p => p.CategoryName == "collection")
      });
 
      context.Products.Add(new Product() { 
        ProductName = "Shakespeare W. Shakespeare's dramatische Werke",
        Price = 78,
        Category = context.ProductCategories.Local.Single(p => p.CategoryName == "prose")
      });
      context.Products.Add(new Product() { 
        ProductName = "King Stephen. 'Salem's Lot", 
        Price = 67, 
        Category = context.ProductCategories.Local.Single(p => p.CategoryName == "poetry")
      });
      context.Products.Add(new Product() { 
        ProductName = "Plutarchus. Plutarch's moralia", 
        Price = 89, 
        Category = context.ProductCategories.Local.Single(p => p.CategoryName == "prose")
      });
      context.Products.Add(new Product() { 
        ProductName = "Twain Mark. Ventures of Huckleberry Finn", 
        Price = 34, 
        Category = context.ProductCategories.Local.Single(p => p.CategoryName == "novel")
      });
      context.Products.Add(new Product() { 
        ProductName = "Harrison G. B. England in Shakespeare's day", 
        Price = 540, 
        Category = context.ProductCategories.Local.Single(p => p.CategoryName == "novel")
      });
      context.Products.Add(new Product() { 
        ProductName = "Corkett Anne. The salamander's laughter", 
        Price = 5,
        Category = context.ProductCategories.Local.Single(p => p.CategoryName == "poem")
      });
      context.Products.Add(new Product() { 
        ProductName = "Lightman Alan. Einstein''s dreams", 
        Price = 5,
        Category = context.ProductCategories.Local.Single(p => p.CategoryName == "poem")
      });
 
      context.Companies.Add(new Company() {
        CompanyName = "Borland UK CodeGear Division",
        Web = "support.codegear.com/"
      });
      context.Companies.Add(new Company() {
        CompanyName = "Alfa-Bank",
        Web = "www.alfabank.com"
      });
      context.Companies.Add(new Company() {
        CompanyName = "Pioneer Pole Buildings, Inc.",
        Web = "www.pioneerpolebuildings.com"
      });
      context.Companies.Add(new Company() {
        CompanyName = "Orion Telecoms (Pty) Ltd.",
        Web = "www.oriontele.com"
      });
      context.Companies.Add(new Company() {
        CompanyName = "Orderbase Consulting GmbH",
        Web = "orderbase.de"
      });
 
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2007, 4, 11),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Borland UK CodeGear Division")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2006, 3, 11),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Borland UK CodeGear Division")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2006, 8, 6),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Alfa-Bank")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2004, 7, 6),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Alfa-Bank")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2006, 8, 8),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Alfa-Bank")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2003, 3, 1),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Pioneer Pole Buildings, Inc.")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2005, 8, 6),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Orion Telecoms (Pty) Ltd.")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2006, 8, 1),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Orion Telecoms (Pty) Ltd.")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2007, 7, 1),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Orion Telecoms (Pty) Ltd.")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2007, 2, 6),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Orderbase Consulting GmbH")
      });
      context.Orders.Add(new Order() {
        OrderDate = new DateTime(2007, 8, 1),
        Company = context.Companies.Local.Single(c => c.CompanyName == "Orderbase Consulting GmbH")
      });
 
      context.SaveChanges();
    }
  }
Public NotInheritable Class MyDbContextSeeder
	Private Sub New()
	End Sub
	Public Shared Sub Seed(context As MyDbContext)
		context.Database.EnsureDeleted()
		context.Database.EnsureCreated()
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "prose" _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "novel" _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "poetry", _
			Key .ParentCategory = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "novel") _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "detective story" _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "fantasy", _
			Key .ParentCategory = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "novel") _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "pop art", _
			Key .ParentCategory = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "fantasy") _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "textbook" _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "research book", _
			Key .ParentCategory = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "textbook") _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "poem", _
			Key .ParentCategory = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "novel") _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "collection", _
			Key .ParentCategory = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "textbook") _
		})
		context.ProductCategories.Add(New ProductCategory() With { _
			Key .CategoryName = "dictionary", _
			Key .ParentCategory = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "collection") _
		})
		context.Products.Add(New Product() With { _
			Key .ProductName = "Shakespeare W. Shakespeare's dramatische Werke", _
			Key .Price = 78, _
			Key .Category = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "prose") _
		})
		context.Products.Add(New Product() With { _
			Key .ProductName = "King Stephen. 'Salem's Lot", _
			Key .Price = 67, _
			Key .Category = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "poetry") _
		})
		context.Products.Add(New Product() With { _
			Key .ProductName = "Plutarchus. Plutarch's moralia", _
			Key .Price = 89, _
			Key .Category = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "prose") _
		})
		context.Products.Add(New Product() With { _
			Key .ProductName = "Twain Mark. Ventures of Huckleberry Finn", _
			Key .Price = 34, _
			Key .Category = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "novel") _
		})
		context.Products.Add(New Product() With { _
			Key .ProductName = "Harrison G. B. England in Shakespeare's day", _
			Key .Price = 540, _
			Key .Category = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "novel") _
		})
		context.Products.Add(New Product() With { _
			Key .ProductName = "Corkett Anne. The salamander's laughter", _
			Key .Price = 5, _
			Key .Category = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "poem") _
		})
		context.Products.Add(New Product() With { _
			Key .ProductName = "Lightman Alan. Einstein''s dreams", _
			Key .Price = 5, _
			Key .Category = context.ProductCategories.Local.[Single](Function(p) p.CategoryName = "poem") _
		})
		context.Companies.Add(New Company() With { _
			Key .CompanyName = "Borland UK CodeGear Division", _
			Key .Web = "support.codegear.com/" _
		})
		context.Companies.Add(New Company() With { _
			Key .CompanyName = "Alfa-Bank", _
			Key .Web = "www.alfabank.com" _
		})
		context.Companies.Add(New Company() With { _
			Key .CompanyName = "Pioneer Pole Buildings, Inc.", _
			Key .Web = "www.pioneerpolebuildings.com" _
		})
		context.Companies.Add(New Company() With { _
			Key .CompanyName = "Orion Telecoms (Pty) Ltd.", _
			Key .Web = "www.oriontele.com" _
		})
		context.Companies.Add(New Company() With { _
			Key .CompanyName = "Orderbase Consulting GmbH", _
			Key .Web = "orderbase.de" _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2007, 4, 11), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Borland UK CodeGear Division") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2006, 3, 11), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Borland UK CodeGear Division") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2006, 8, 6), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Alfa-Bank") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2004, 7, 6), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Alfa-Bank") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2006, 8, 8), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Alfa-Bank") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2003, 3, 1), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Pioneer Pole Buildings, Inc.") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2005, 8, 6), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Orion Telecoms (Pty) Ltd.") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2006, 8, 1), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Orion Telecoms (Pty) Ltd.") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2007, 7, 1), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Orion Telecoms (Pty) Ltd.") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2007, 2, 6), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Orderbase Consulting GmbH") _
		})
		context.Orders.Add(New Order() With { _
			Key .OrderDate = New DateTime(2007, 8, 1), _
			Key .Company = context.Companies.Local.[Single](Function(c) c.CompanyName = "Orderbase Consulting GmbH") _
		})
		context.SaveChanges()
	End Sub
End Class
  class Program {
 
    static void Main(string[] args) {
 
      var context = new MyDbContext ();
 
      Console.WriteLine("Entity Framework Core Code-First sample");
      Console.WriteLine();
 
      MyDbContextSeeder.Seed(context);
 
      Console.WriteLine("Products with categories");
      Console.WriteLine();
 
      var query = context.Products.Include(p => p.Category)
          .Where(p => p.Price > 20.0)
          .ToList();
 
      Console.WriteLine("{0,-10} | {1,-50} | {2}", "ProductID", "ProductName", "CategoryName");
      Console.WriteLine();
      foreach (var product in query )
        Console.WriteLine("{0,-10} | {1,-50} | {2}", product.ProductID, product.ProductName, product.Category.CategoryName);
 
      Console.ReadKey();
    }
  }
Class Program
	Private Shared Sub Main(args As String())
		Dim context = New MyDbContext()
		Console.WriteLine("Entity Framework Core Code-First sample")
		Console.WriteLine()
		MyDbContextSeeder.Seed(context)
		Console.WriteLine("Products with categories")
		Console.WriteLine()
		Dim query = context.Products.Include(Function(p) p.Category).Where(Function(p) p.Price > 20.0).ToList()
		Console.WriteLine("{0,-10} | {1,-50} | {2}", "ProductID", "ProductName", "CategoryName")
		Console.WriteLine()
		For Each product As var In query
			Console.WriteLine("{0,-10} | {1,-50} | {2}", product.ProductID, product.ProductName, product.Category.CategoryName)
		Next
		Console.ReadKey()
	End Sub
End Class
Entity Framework Core Code-First sample Products with categories ProductID | ProductName | CategoryName 1 | Harrison G. B. England in Shakespeare's day | novel 2 | Twain Mark. Ventures of Huckleberry Finn | novel 3 | Plutarchus. Plutarch's moralia | prose 4 | Shakespeare W. Shakespeare's dramatische Werke | prose 5 | King Stephen. 'Salem's Lot | poetry
Entity Framework section | Entity Framework Support Overview