EF Core的安装、EF Core与数据库结合

EF Core的安装

EF Core是新一代可扩展和跨平台的Entity
Framework版本。较与旧版本,它不再使用edmx可视化的操作界面,但是仍然可以通过命令的形式通过数据库生成代码或通过代码生成数据库。

EF Core实体框架核心安装:
  1. 工具> NuGet软件包管理器>软件包管理器控制台

  2. Install-Package Microsoft.EntityFrameworkCore.SqlServer

  3. Install-Package Microsoft.EntityFrameworkCore.Tools

  4. Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design

数据库与EF结合使用:

方式一:通过现有数据库创建模型:
  1. 工具 - >连接到数据库…,选择Microsoft SQL Server

  2. 添加数据库连接

  3. 工具 - > NuGet软件包管理器 - >软件包管理器控制台

注意:下面的 Server=(localdb)\mssqllocaldb 指的是vs自带的数据库,如果要使用本地SQLServer的话那么需要换成 “.”或 “localhost”。Trusted_Connection=True使用的是window身份验证,如果要使用账户密码的话,请换成Uid和Pwd.

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=[YourDatabase];Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

该命令会在Models文件夹下生成数据库中的表和上下文对象

方式二:通过模型创建数据库
  1. 创建模型类和上下文类

    public class BloggingContext : DbContext
    {
        public BloggingContext(DbContextOptions<BloggingContext> options)
            : base(options)
        { }
    
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
    }
    
    public class Blog
    {
      public int BlogId { get; set; }
      public string Url { get; set; }
    
      public List< Post > Posts { get; set; }
    }
    
    public class Post
    {
      public int PostId { get; set; }
      public string Title { get; set; }
      public string Content { get; set; }
    
      public int BlogId { get; set; }
      public Blog Blog { get; set; }
    }
  2. 在startup.cs的ConfigureServices方法中中将上下文类注册为全局服务:
    services.AddDbContext(options => options.UseSqlServer(connection));

    在appsetting文件中增加连接字符串connection

  3. 创建数据库
    工具 - > NuGet软件包管理器 - >软件包管理器控制台
    //创建模型的初始表
    Add-Migration InitialCreate
    //将新迁移应用于数据库
    Update-Database

通过模型创建数据库细节

如果选择通过模型创建数据库的方式:

第一步:根据自己预先设计的UML图或类结构关系图,建立模型(model)类

例如图书商城项目中的Book类:

public partial class Book
    {
        public int Id { get; set; }
        public int CategoryId { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public int PublisherId { get; set; }
        public DateTime PublishDate { get; set; }
        public string Isbn { get; set; }
        public int WordsCount { get; set; }
        public decimal UnitPrice { get; set; }
        public string ContentDescription { get; set; }
        public string AurhorDescription { get; set; }
        public string EditorComment { get; set; }
        public string Toc { get; set; }
    }
第二步:通过Fluent API,创建上下文对象,配置约束
public partial class MallContext : DbContext
{
    public virtual DbSet<Book> Book { get; set; }
    public virtual DbSet<Captcha> Captcha { get; set; }
    public virtual DbSet<Cart> Cart { get; set; }
    //......省略n个模型对象

    //重写OnConfiguring方法,配置数据库连接
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {                    optionsBuilder.UseSqlServer(@"Server=.;Database=Mall;Trusted_Connection=True;");
    }

    //重写OnModelCreating方法,配置创建model的约束条件
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Book>(entity =>
        {
            entity.Property(e => e.Author)
                  .IsRequired()
                  .HasMaxLength(200);

            entity.Property(e => e.PublishDate).HasColumnType("datetime");

            entity.HasIndex(e => e.Isbn)
                    .HasName("IX_Books_ISBN")
                    .IsUnique();

            entity.Property(e => e.Isbn)
                    .IsRequired()
                    .HasColumnName("ISBN")
                    .HasMaxLength(50);
        }
        modelBuilder.Entity<Captcha>(entity =>
        {
            //......
        }
    }
}
第三步:拥有模型后,通过迁移来创建数据库

工具 - > NuGet软件包管理器 - >软件包管理器控制台

运行 Add-Migration InitialCreate 创建模型的初始表。

运行 Update-Database 以将新迁移应用于数据库。

约束的配置详细

以上面的Book对象为例:

//为某个字段添加索引,并设置索引名,并设为唯一值
entity.HasIndex(e => e.Isbn)
      .HasName("IX_Books_ISBN")
      .IsUnique();

//为某个字段添加约束,设为必填项,字符串最大长度200
entity.Property(e => e.Author)
      .IsRequired()
      .HasMaxLength(200);

//为某个字段添加约束,设为必填项,设置表中列名并与模型类字段建立映射,字符串最大长度为50
 entity.Property(e => e.Isbn)
       .IsRequired()
       .HasColumnName("ISBN")
       .HasMaxLength(50);

//为某个字段添加约束,设置该字段在数据库表中列的Type
entity.Property(e => e.PublishDate).HasColumnType("datetime");

//为某个字段建立与表中列名的映射,并设置默认值
entity.Property(e => e.Toc)
      .HasColumnName("TOC")
      .HasDefaultValueSql("0");

entity.Property(e => e.Title)
      .IsRequired()
      .HasMaxLength(200);

entity.Property(e => e.UnitPrice).HasColumnType("money");
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
除了使用命令行工具创建 SQLite 数据库EF Core 还提供了在应用程序代码中创建数据库的方法。可以按照以下步骤进行: 1. 安装 EF Core 和 SQLite NuGet 包。 在 Visual Studio 中,可以通过 NuGet 包管理器来安装 EF Core 和 SQLite。可以在“工具”->“NuGet 包管理器”->“程序包管理器控制台”中使用以下命令来安装它们: ```bash Install-Package Microsoft.EntityFrameworkCore.Sqlite Install-Package Microsoft.EntityFrameworkCore.Tools ``` 2. 创建 DbContext 类。 创建一个类继承自 DbContext,该类表示一个数据库上下文,用于访问和操作数据库。在 DbContext 类中,可以通过 DbSet 属性来表示要在数据库中创建的实体类。 ```csharp public class MyDbContext : DbContext { public DbSet<Person> People { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlite("Data Source=mydatabase.db"); } ``` 上述代码表示创建了一个 DbContext,其中包含一个名为 People 的 DbSet 属性,表示要在数据库中创建一个名为 "People" 的表。 3. 创建实体类。 在 DbContext 类中,使用 DbSet 属性表示要在数据库中创建的实体类,如上述代码所示。实体类通常包含表中的列,每个属性表示一个列。 ```csharp public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } ``` 上述代码表示创建了一个名为 Person 的实体类,其中包含 Id、Name 和 Age 三个属性,分别表示表中的三个列。 4. 在应用程序代码中创建数据库。 可以使用以下代码在应用程序代码中创建数据库: ```csharp using (var context = new MyDbContext()) { context.Database.EnsureCreated(); } ``` 上述代码表示创建一个 MyDbContext 实例,并使用 EnsureCreated 方法创建数据库。如果数据库已经存在,则不会执行任何操作。 希望这些步骤对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值