Entity Framework Code First数据库连接

来源:互联网 发布:魔术蜘蛛软件2.0 编辑:程序博客网 时间:2024/05/20 13:04

1.安装Entity Framework 

  • “项目”–>“管理 NuGet 程序包…”
    注意:如果没有“管理 NuGet 程序包…”选项,则应安装 最新版本的 NuGet
  • 选择“联机”选项卡
  • 选择“EntityFramework”程序包
  • 单击“安装”
2.修改APP.config配置文件,
默认连接工厂类型要修改成:defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory

<?xml version="1.0" encoding="utf-8"?>

<configuration>  <configSections>    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />  </configSections>  <entityFramework>    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">      <parameters>        <parameter value="Data Source=(local); Database=Portal; User ID=sa; Password=; MultipleActiveResultSets=True" />      </parameters>    </defaultConnectionFactory>  </entityFramework></configuration>

3.创建数据库访问的上下文,表示数据库的一个会话,以便我们查询和保存数据。

创建的数据库访问类应该派生自 System.Data.Entity.DbContext 的上下文,并为模型中的每个类公开一个类型化 DbSet<TEntity>。

using System.Data.Entity;public class BloggingContext : DbContext {     public DbSet<Blog> Blogs { get; set; }     public DbSet<Post> Posts { get; set; } }

4.读写数据

class Program {     static void Main(string[] args)     {         using (var db = new BloggingContext()) //1.创建数据库访问类        {             // Create and save a new Blog             Console.Write("Enter a name for a new Blog: ");             var name = Console.ReadLine();              var blog = new Blog { Name = name };             db.Blogs.Add(blog); //2.将实体添加到数据库访问类            db.SaveChanges(); //3.将数据写入到数据库             // 从数据库中读取数据            var query = from b in db.Blogs                         orderby b.Name                         select b;              Console.WriteLine("All blogs in the database:");             foreach (var item in query)             {                 Console.WriteLine(item.Name);             }              Console.WriteLine("Press any key to exit...");             Console.ReadKey();         }     } }


5.实体有更改,更新数据库结构,即迁移

现在更改模型,当我们进行更改时,还需要更新数据库架构。为此,我们使用一个称为“Code First 迁移”(或简称“迁移”)的功能。

“迁移”是一组有序的步骤,描述如何升级(和降级)数据库架构。这些步骤(称为“迁移”)中的每个步骤均包含一些代码,用于描述要应用的更改。 

第一步是为 BloggingContext 启用 Code First 迁移。

  • “工具”->“库程序包管理器”->“程序包管理器控制台”
  • 在程序包管理器控制台中运行 Enable-Migrations 命令,首次迁移时执行,仅执行一次
  • 一个新的 Migrations 文件夹已添加至项目中,它包含两个文件:
    • Configuration.cs — 此文件包含“迁移”将用来迁移 BloggingContext 的设置。在本演练中不需要进行任何更改,但是,在此处可以指定种子数据、为其他数据库注册提供程序、更改生成迁移的命名空间等。
    • <时间戳>_InitialCreate.cs — 这是第一个迁移,它表示已经应用于数据库的更改。应用更改的目的是将其从空数据库迁移至包含博客和文章表的数据库。尽管我们让 Code First 自动创建这些表,现在我们选择“迁移”(已转化为一次“迁移”)。Code First 还在本地数据库中记录:该“迁移”已经应用。文件名中的时间戳用于排序。

    现在,更改模型,向 Blog 类添加一个 Url 属性:
public class Blog 

    public int BlogId { get; set; } 
    public string Name { get; set; } 
    public string Url { get; set; } 
 
    public virtual List<Post> Posts { get; set; } 
}
  • 在程序包管理器控制台中运行 Add-Migration AddUrl 命令。非首次迁移,执行命令后数据结构并未更新,仅仅是生成了迁移代码。

    Add-Migration 命令检查自上次迁移后是否有更改,并使用所有更改搭建新迁移。我们可以为迁移指定名称;在本例中,将此迁移称为“AddUrl”。

  • 5.1将生成的迁移代码更新数据库结构,执行后数据库结构已更新
    • 在程序包管理器控制台中运行 Update-Database 命令。此命令将所有挂起的迁移应用于数据库。InitialCreate 迁移已经应用,因此,这些迁移将仅应用新的 AddUrl 迁移。

      提示:在调用 Update-Database 命令查看对数据库执行的 SQL 时,可以使用 –Verbose 开关。
6.数据注释,即更改表和字段的属性如长度、是否为空等。有两种方法:1.标注属性,2.重写OnModelCreating方法。两种方法可同时使用
6.1 标注属性

using System.ComponentModel.DataAnnotations;现在,注释 Username 属性,将它标识为主键public class User {     [Key]     public string Username { get; set; }     public string DisplayName { get; set; } }

EF 支持的完整注释列表为:

  • KeyAttribute
  • StringLengthAttribute
  • MaxLengthAttribute
  • ConcurrencyCheckAttribute
  • RequiredAttribute
  • TimestampAttribute
  • ComplexTypeAttribute
  • ColumnAttribute
  • TableAttribute
  • InversePropertyAttribute
  • ForeignKeyAttribute
  • DatabaseGeneratedAttribute
  • NotMappedAttribute
6.2  Fluent API

大多数模型配置都可使用简单数据注释进行。Fluent API 是一种更高级的方法,除某些数据注释不可能支持的更高级配置外,可以指定包含数据注释所有功能的模型配置。数据注释和 Fluent API 可一起使用。

要访问 Fluent API,需要在 DbContext 中重写 OnModelCreating 方法。假设我们需要重命名 User.DisplayName 存储至 display_name 的列。

  • 使用以下代码重写 BloggingContext 的 OnModelCreating 方法
public class BloggingContext : DbContext {     public DbSet<Blog> Blogs { get; set; }     public DbSet<Post> Posts { get; set; }     public DbSet<User> Users { get; set; }      protected override void OnModelCreating(DbModelBuilder modelBuilder)     {         modelBuilder.Entity<User>()             .Property(u => u.DisplayName)             .HasColumnName("display_name");     } }

  • 使用 Add-Migration ChangeDisplayName 命令搭建迁移,将这些更改应用于数据库。
  • 运行 Update-Database 命令,将新迁移应用于数据库。
DisplayName 列现在重命名为 display_name:
显示在服务器资源管理器中的架构












0 0