EFCore初探
一、如何使用DBFirst
1.引入包
代码如下(示例):
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.SqlServer.Design
Microsoft.EntityFrameworkCore.Tools
2.程序包控制台执行
代码如下(示例):
Scaffold-DbContext -Connection "Server=.;Database=EFCoreDemo;uid=sa;pwd=123123" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "Entities"
经过以上两个步骤就可以根据数据自动生成Entities实体模型和DBContext
3.添加日志框架
代码如下(示例):
加入包
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Console
定义日志工厂
public static ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
注入工厂
optionsBuilder.UseLoggerFactory(MyLoggerFactory);
二、如何在CodeFirst中做数据迁移
1.定义数据库实体模型
实体中必须声明主键(Id默认被认为是主键)
代码如下(示例):
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
#nullable disable
namespace EFCoreDemo.CodeFirst.Migrations.Entities
{
public partial class Category
{
public Category()
{
Products = new HashSet<Product>();
}
[Key]
[Required]
public int Id {
get; set; }
public string Name {
get; set; }
public string Desc {
get; set; }
public virtual ICollection<Product> Products {
get; set; }
}
}
代码如下(示例):
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
#nullable disable
namespace EFCoreDemo.CodeFirst.Migrations.Entities
{
public partial class Product
{
public Product()
{
Orders = new HashSet<Order>();
}
public int Id {
get; set; }
public string Name {
get; set; }
public decimal Price {
get; set; }
public string Desc {
get; set; }
public int CatetoryId {
get; set; }
public bool Discontinued {
get; set; }
[Required]
[MaxLength(100)]
public string Url {
get; set; }
public virtual Category Catetory {
get; set; }
public virtual ICollection<Order> Orders {
get; set; }
}
}
代码如下(示例):
using System;
using System.Collections.Generic;
#nullable disable
namespace EFCoreDemo.CodeFirst.Migrations.Entities
{
public partial class Client
{
public Client()
{
Orders = new HashSet<Order>();
}
public int Id {
get; set; }
public string Name {
get; set; }
public string Tel {
get; set; }
public bool? Sex {
get; set; }
public string Address {
get; set; }
public DateTime CreateTime {
get; set; }
public int CreatorId {
get; set