這篇會使用 Visual Studio 2015 + .NET 4.6.2 建立 Console 程式來嘗試 EF Core,
同時也會使用 dotnet + .NET Core 1.0 建立 Console 程式來嘗試 EF Core。
讓我們從熟悉的 Visual Studio 2015 開始吧!
1. 建立新的 Console 專案
2. 打開 Package Manager Console
3. 安裝 Microsoft.EntityFrameworkCore.SqlServer 套件( 能連接 SqlServer 的 EF Core 核心套件 )
Install-Package Microsoft.EntityFrameworkCore.SqlServer
4. 安裝 Microsoft.EntityFrameworkCore.Tools ( 像是 migration 指令會用到 )
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
5. 建立一個 Models.cs 類別,裡面放 EF 要建立資料庫相關代碼,
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFCoreNET462
{
public class Ex1Context : DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreExample1DB;Trusted_Connection=True;");
}
}
public class Order
{
public int OrderId { get; set; }
public DateTime CreateDate { get; set; }
public List<OrderDetail> Details { get; set; }
}
public class OrderDetail
{
public int OrderDetailId { get; set; }
public string ProductNo { get; set; }
public int OrderId { get; set; }
public Order Order { get; set; }
}
}
6. 在 Package Manager Console 輸入
Add-Migration MyFirstMigration
這個會建立 Migrations 資料夾,裡面包含 ModelSnapshot.cs 結尾的檔案與 時間戳_MyFirstMigration.cs,
主要是這個指令會偵測程式碼中的 Ex1Context 相關代碼,去產生這些與資料庫結構有關的代碼
7. 接著一樣在 Package Manager Console 輸入
Update-Database
這個動作就會依照 Migrations 的設定,建立資料庫與 Tables
8. 在 Program.cs 加入以下代碼
using System;
using System.Linq;
namespace EFCoreNET462
{
class Program
{
static void Main(string[] args)
{
using (var db = new Ex1Context())
{
if (! db.Orders.Any())
{
db.Orders.Add(new Order
{
CreateDate = DateTime.Now
});
db.SaveChanges();
}
var list = db.Orders.ToList();
foreach (var item in list)
{
Console.WriteLine($"{item.OrderId}: {item.CreateDate}");
}
Console.Read();
}
}
}
}
執行後應該會看到
接著換 dotnet,其中若想寫程式的部分,可以用 Visual Studio Code,
1. 用命令提示字元建立先建立要放專案檔案的資料夾,並切換資料夾
mkdir EFCoreNETCore10
cd EFCoreNETCore10
2. 然後建立專案,然後第一次記得都要還原套件
dotnet new
dotnet restore
3. 在用 Visual Studio Code 的指令來開啟(或用記事本編輯也可)
code .
4. project.json 加入 Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.EntityFrameworkCore.SqlServer":"1.0.1",
"Microsoft.EntityFrameworkCore.Design": {
"version": "1.0.0-preview2-final",
"type": "build"
}
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
},
"imports": "dnxcore50"
}
},
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
}
}
5. 建立 models.cs 加入以下代碼
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
namespace EFCoreNETCore10
{
public class Ex1Context : DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFCoreExample2DB;Trusted_Connection=True;");
}
}
public class Order
{
public int OrderId { get; set; }
public DateTime CreateDate { get; set; }
public List<OrderDetail> Details { get; set; }
}
public class OrderDetail
{
public int OrderDetailId { get; set; }
public string ProductNo { get; set; }
public int OrderId { get; set; }
public Order Order { get; set; }
}
}
6. 用命令提示字元建立 migrations
dotnet ef migrations add MyFirstMigration
7. 在將資料庫建立起來
dotnet ef database update
8. Program.cs 加入測試代碼
using System;
using System.Linq;
namespace EFCoreNETCore10
{
class Program
{
static void Main(string[] args)
{
using (var db = new Ex1Context())
{
if (!db.Orders.Any())
{
db.Orders.Add(new Order
{
CreateDate = DateTime.Now
});
db.SaveChanges();
}
var list = db.Orders.ToList();
foreach (var item in list)
{
Console.WriteLine($"{item.OrderId}: {item.CreateDate}");
}
Console.Read();
}
}
}
}
9. 執行看看
dotnet run
參考文章