ENTITY FRAMEWORK CORE入門:一、初探EFCore的操作
本文使用的NetCore版本是2.2的
一、建立項目EFCoreTest01、類庫(Core.Data、EFCore.Domain.Models)
二、在EFCore.Domain.Models類庫中建立City.cs、Province.cs
namespace EFCore.Domain.Models
{
/// <summary>
/// 城市
/// </summary>
public class City
{
/// <summary>
/// 編碼
/// </summary>
public int Id { get; set; }
/// <summary>
/// 城市名稱
/// </summary>
public string Name { get; set; }
/// <summary>
/// 郵編
/// </summary>
public string AreaCode { get; set; }
/// <summary>
/// 所屬省份編碼
/// </summary>
public int ProviedId { get; set; }
/// <summary>
/// 省份
/// </summary>
public Province Province { get; set; }
}
}
public class Province
{
public Province()
{
Cities = new List<City>();
}
/// <summary>
/// 編碼
/// </summary>
public int Id { get; set; }
/// <summary>
/// 省份名稱
/// </summary>
public string Name { get; set; }
/// <summary>
/// 人口
/// </summary>
public int Population { get; set; }
/// <summary>
/// 城市
/// </summary>
public List<City> Cities { get; set; }
}
三、在Core.Data類庫的Nuget中安裝Microsoft.EntityFrameworkCore.SqlServer
在Core.Data引用類庫EFCore.Domain.Models
四、在Core.Data類庫添加TestContext.cs
public class TestContext:DbContext
{
public DbSet<Province> Provinces { get; set; }
public DbSet<City> Cities { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//使用本地的Windows驗證
optionsBuilder.UseSqlServer("Server=(localdb)\\WIN-NNQVERK2299\\MSSQL2012;Database=EFCore01;Uid=sa;Pwd=123456;Trusted_Connection=True;");
//base.OnConfiguring(optionsBuilder);
}
}
五、EFCore遷移(在Visual Studio中使用,需要安裝Microsoft.EntityFrameworkCore.Tools)
1、步驟說明
①創建/修改Domain Model
②創建遷移文件
③應用遷移到數據庫,或者生成腳本
2、遷移操作
在Core.Data中添加MicrosoftEntityFrameworkCore.Tools
點擊選擇打開 工具=》Nuget包管理器=》程序包管理器控制檯
運行 get-help entityframeworkcore 查看命令
執行命令Add-Migration Initial,由於寫這個是第二次寫所以成功了,之前有2個錯誤:
(1)是PowerShell版本過老
(2)引用的版本不統一,注意統一下版本,我下面的截圖是能正確運行的版本
錯誤均解決後執行add-migration EFCoreTest001Migration(取個名字:EFCoreTest001Migration)
注意:啓動項必須設置成含有數據庫連接的項目程序(將Core.Data設置爲啓動項,因爲數據庫連接文件TestContext.cs在此項目中)
使用script-migration執行獲取數據庫執行文件,可直接用其在數據庫上執行生成數據庫
IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL
BEGIN
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
END;
GO
CREATE TABLE [Provinces] (
[Id] int NOT NULL IDENTITY,
[Name] nvarchar(max) NULL,
[Population] int NOT NULL,
CONSTRAINT [PK_Provinces] PRIMARY KEY ([Id])
);
GO
CREATE TABLE [Cities] (
[Id] int NOT NULL IDENTITY,
[Name] nvarchar(max) NULL,
[AreaCode] nvarchar(max) NULL,
[ProviedId] int NOT NULL,
[ProvinceId] int NULL,
CONSTRAINT [PK_Cities] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Cities_Provinces_ProvinceId] FOREIGN KEY ([ProvinceId]) REFERENCES [Provinces] ([Id]) ON DELETE NO ACTION
);
GO
CREATE INDEX [IX_Cities_ProvinceId] ON [Cities] ([ProvinceId]);
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20200317031330_Initial', N'3.1.2');
GO
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20200317032407_EFCoreTest001Migration', N'3.1.2');
GO
沒有問題之後,就可以執行Update-Database,寫數據入庫(在 C/User/用戶名 文件裏頭可以找到EFCoreDemo.mdf數據庫),檢查數據庫中庫和表均已經創建。
[正文部分結束]
感謝:DZW159 參考鏈接:https://www.cnblogs.com/dzw159/p/10646368.html