Entity Framework Code First数据库连接
2016-08-15 14:56
731 查看
1.安装Entity Framework
“项目”–>“管理 NuGet 程序包…”
注意:如果没有“管理 NuGet 程序包…”选项,则应安装 最新版本的
NuGet
选择“联机”选项卡
选择“EntityFramework”程序包
单击“安装”
2.修改APP.config配置文件,
<?xml version="1.0" encoding="utf-8"?>
3.创建数据库访问的上下文,表示数据库的一个会话,以便我们查询和保存数据。
创建的数据库访问类应该派生自 System.Data.Entity.DbContext 的上下文,并为模型中的每个类公开一个类型化 DbSet<TEntity>。
4.读写数据
5.实体有更改,更新数据库结构,即迁移
现在更改模型,当我们进行更改时,还需要更新数据库架构。为此,我们使用一个称为“Code First 迁移”(或简称“迁移”)的功能。
“迁移”是一组有序的步骤,描述如何升级(和降级)数据库架构。这些步骤(称为“迁移”)中的每个步骤均包含一些代码,用于描述要应用的更改。
第一步是为 BloggingContext 启用 Code First 迁移。
“工具”->“库程序包管理器”->“程序包管理器控制台”
在程序包管理器控制台中运行 Enable-Migrations 命令,首次迁移时执行,仅执行一次
一个新的 Migrations 文件夹已添加至项目中,它包含两个文件:
Configuration.cs — 此文件包含“迁移”将用来迁移 BloggingContext 的设置。在本演练中不需要进行任何更改,但是,在此处可以指定种子数据、为其他数据库注册提供程序、更改生成迁移的命名空间等。
<时间戳>_InitialCreate.cs — 这是第一个迁移,它表示已经应用于数据库的更改。应用更改的目的是将其从空数据库迁移至包含博客和文章表的数据库。尽管我们让 Code First 自动创建这些表,现在我们选择“迁移”(已转化为一次“迁移”)。Code First 还在本地数据库中记录:该“迁移”已经应用。文件名中的时间戳用于排序。
现在,更改模型,向 Blog 类添加一个 Url 属性:
在程序包管理器控制台中运行 Add-Migration AddUrl 命令。非首次迁移,执行命令后数据结构并未更新,仅仅是生成了迁移代码。
Add-Migration 命令检查自上次迁移后是否有更改,并使用所有更改搭建新迁移。我们可以为迁移指定名称;在本例中,将此迁移称为“AddUrl”。
5.1将生成的迁移代码更新数据库结构,执行后数据库结构已更新
在程序包管理器控制台中运行 Update-Database 命令。此命令将所有挂起的迁移应用于数据库。InitialCreate 迁移已经应用,因此,这些迁移将仅应用新的 AddUrl 迁移。
提示:在调用 Update-Database 命令查看对数据库执行的 SQL 时,可以使用 –Verbose 开关。
6.数据注释,即更改表和字段的属性如长度、是否为空等。有两种方法:1.标注属性,2.重写OnModelCreating方法。两种方法可同时使用
6.1 标注属性
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 方法
使用 Add-Migration ChangeDisplayName 命令搭建迁移,将这些更改应用于数据库。
运行 Update-Database 命令,将新迁移应用于数据库。
DisplayName 列现在重命名为 display_name:
“项目”–>“管理 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:
相关文章推荐
- Entity Framework Code First数据库连接
- EntityFrameWork Code First 多数据库以及自定义字符串的使用+连接字符串加密调用
- Entity Framework Code First数据库连接
- Entity Framework Code First数据库连接
- Entity Framework CodeFirst------使用CodeFirst方式建立数据库连接(一)
- Entity Framework Code First数据库自动更新
- Entity Framework code first 手动修改数据库的问题
- 【步步为营 Entity Framework+Reporting service开发】-(2) Code First ,EF创建数据库,数据表
- Entity Framework Code First 迁移数据库
- Entity Framework code first 手动修改数据库的问题
- Entity Framework Code First 多数据库 控制台迁移代码
- Entity Framework Code First 学习日记(10)-兼容遗留数据库
- 代码生成数据库及更新数据库:Entity Framework first code(http://www.cnblogs.com/haogj/archive/2012/02/17/2356537.ht
- Entity FrameWork Code First无法生成数据库 解决办法
- EntityFramework Code-First 简易教程(十一)-------从已存在的数据库中映射出表
- Entity Framework Code First数据库迁移(DB Migration)
- Entity Framework code first设置不在数据库中生成外键
- EntityFramework Code First 手写代码实现生成数据库
- entity framework codefirst 用户代码未处理DataException,InnerException基础提供程序在open上失败,数据库生成失败
- EntityFramework Codefirst 数据库初始化