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
        }
   

创建数据库

Entity framework          


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
}
   
上一篇:C#文件打包下载


下一篇:iOS开发之SQLite--C语言接口规范(四) —— Result Values From A Query