Entity framework

Entity Framework Core

Entity FrameWork Core 简称EF ,EF使用教程

1:创建EF

 
 
 
 
 

3
 
 
 
 
 
1
//使用VS2019依次点击:“工具”>“NuGet 包管理器”>“包管理器控制台”
2

3
运行此命令安装EF:  Install-Package Microsoft.EntityFrameworkCore.Sqlite
 
 

2:创建模型,添加类Movies.cs类

 
 
 
 
 
 
 
 
 
 
 
1

 
 

3:连接数据库

 
 
 
 
 

9
 
 
 
 
 
1
//1:首先在appsettings里面设置连接字符串
2
"ConnectionStrings": {//MvcMovieContext-1是数据库的名称
3
    "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-1;Trusted_Connection=True;MultipleActiveResultSets=true"
4
  }
5

6
2:然后在startup里面的CongifUreServices方法里面添加
7

8
services.AddDbContext<MvcMovieContext>(options =>//MvcMovieContext是数据库的名称
9
           options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
 
 

构造函数参数

 
 
 
 
 

9
 
 
 
 
 
1
 //类名 
2
public class BloggingContext : DbContext
3
{//类名类名
4
    public BloggingContext(DbContextOptions<BloggingContext> options)
5
        : base(options)
6
    { }
7
//Blog控制器,也就是类
8
    public DbSet<Blog> Blogs { get; set; }
9
}
 
 

在asp当中使用

 
 
 
 
 

7
 
 
 
 
 
1
        //EF的构造函数
2
private readonly MvcMovieContext _context;
3
//当前的类名EF的构造函数
4
        public MoviesController(MvcMovieContext context)
5
        {
6
            _context = context;
7
        }
 
 

创建数据库

 
 
 
 
 

26
 
 
 
 
 
1
        public static void Main(string[] args)
2
        {
3
            var host = CreateHostBuilder(args).Build();
4

5
            CreateDbIfNotExists(host);
6

7
            host.Run();
8
        }
9
        //创建数据库
10
        private static void CreateDbIfNotExists(IHost host)
11
        {
12
            using (var scope = host.Services.CreateScope())
13
            {
14
                var services = scope.ServiceProvider;
15

16
                try
17
                {
18
                    var context = services.GetRequiredService<aspcoerdeom1>();
19
                    context.Database.EnsureCreated();
20
                }
21
                catch (Exception ex)
22
                {
23
                    Console.WriteLine("创建出错!"+ex.Message);
24
                }
25
            }
26
        }
 
 
 
 
 
 
 

4
 
 
 
 
 
1
EnsureCreated  EnsureDeleted   //创建数据库和删除数据库
2

3
    创建:dbContext.Database.EnsureCreated();
4
    删除:dbContext.Database.EnsureDeleted();
 
 

定义表名

 
 
 
 
 

6
 
 
 
 
 
1
[Table("blogs")] //定义表名
2
public class Blog
3
{
4
    public int BlogId { get; set; }
5
    public string Url { get; set; }
6
}
 
 

表架构

 
 
 
 
 

7
 
 
 
 
 
1
//使用关系数据库时,表按约定在数据库的默认架构中创建。 例如,Microsoft SQL Server 将使用 dbo 架构(SQLite 不支持架构)。
2
[Table("blogs", Schema = "blogging")]
3
public class Blog
4
{
5
    public int BlogId { get; set; }
6
    public string Url { get; set; }
7
}
 
 

排除类型

 
 
 
 
 

5
 
 
 
 
 
1
[NotMapped] //排除类型
2
public class BlogMetadata
3
{
4
    public DateTime LoadedFromDatabase { get; set; }
5
}
 
 

列名

 
 
 
 
 

6
 
 
 
 
 
1
public class Blog
2
{
3
    [Column("blog_id")]  //定义列名
4
    public int BlogId { get; set; }
5
    public string Url { get; set; }
6
}
 
 

列数据类型

 
 
 
 
 

9
 
 
 
 
 
1
public class Blog
2
{
3
     [MaxLength(500)]//最大值
4
    public int BlogId { get; set; }
5
    [Column(TypeName = "varchar(200)")]  //定义长度
6
    public string Url { get; set; }
7
    [Column(TypeName = "decimal(5, 2)")]  //定义精度为5小数为2
8
    public decimal Rating { get; set; }
9
}
 
 

必须填的类型

 
 
 
 
 

6
 
 
 
 
 
1
public class Blog
2
{
3
    public int BlogId { get; set; }
4
    [Required]  //使用Required
5
    public string Url { get; set; }
6
}
 
 

Keys

 
 
 
 
 

5
 
 
 
 
 
1
class Car
2
{
3
    [Key]  //键
4
    public string LicensePlate { get; set; }
5
}
 
 

在添加时添加值

 
 
 
 
 

5
 
 
 
 
 
1
public class Blog
2
{
3
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //可用于自增id,自身成值
4
    public DateTime Inserted { get; set; }
5
}
 
 

在添加或更新时生成值

 
 
 
 
 

1
 
 
 
 
 
1
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
 
 

并发标记

 
 
 
 
 

10
 
 
 
 
 
1
public class Person
2
{
3
    [Timestamp]
4
    public string LastName { get; set; }
5

6
}
7
//Timestamp/rowversion 是一个属性,在每次插入或更新行时,数据库会自动为其生成新值。 
8
//此属性也被视为并发标记,这确保了在你查询行后,如果正在更新的行发生了更改,则会出现异常。 
9
//确切的详细信息取决于所使用的数据库提供程序;
10
//对于 SQL Server,通常使用byte [] 属性,该属性将设置为数据库中的ROWVERSION列。
 
 

查询数据

 
 
 
 
 

20
 
 
 
 
 
1
------------------查询所有数据
2
using (var context = new BloggingContext())//-----using是指{}内的代码会在运行完后释放
3
{
4
    var blogs = context.Blogs.ToList();///查询
5
}
6

7
------------------加载单个实体
8
using (var context = new BloggingContext())
9
{
10
    var blog = context.Blogs
11
        .Single(b => b.BlogId == 1);
12
}
13

14
------------------筛选
15
using (var context = new BloggingContext())
16
{
17
    var blogs = context.Blogs
18
        .Where(b => b.Url.Contains("dotnet"))
19
        .ToList();
20
}
 
 

数据库迁移

 
 
 
 
 

19
 
 
 
 
 
1
-------------打开解决方案跟目录:cmd
2

3

4
-------------安装工具
5

6
dotnet tool install --global dotnet-ef//安装命令行工具
7
dotnet ef migrations add InitialCreate   //生成迁移文件
8

9
-------------开始迁移
10

11
dotnet ef database update//迁移成功
12

13
--------------如果需要拓展和更新//再次迁移
14

15
dotnet ef migrations add AddBlogCreatedTimestamp
16

17
--------------开始迁移
18

19
dotnet ef database update//迁移成功
 
 

删除迁移

 
 
 
 
 

1
 
 
 
 
 
1
dotnet ef migrations remove
 
 

编程方式迁移

 
 
 
 
 

12
 
 
 
 
 
1
public static void Main(string[] args)
2
{
3
    var host = CreateHostBuilder(args).Build();
4

5
    using (var scope = host.Services.CreateScope())
6
    {
7
        var db = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();//访问
8
        db.Database.Migrate();//迁移
9
    }
10

11
    host.Run();
12
}
 
 
posted @ 2021-09-06 01:16  Entity110  阅读(74)  评论(0)    收藏  举报