新建基于.Net Framework 4.8 控制台应用程序。
在 Visual Studio 开发工具打开“工具”>“NuGet 包管理器”>“包管理器控制台”,安装 EntityFramework。
PM> Install-Package EntityFramework
在 控制台程序中定义的下面添加以下两个类Blog和Post,Blog跟Post是一对多关系:
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public virtual 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 virtual Blog Blog { get; set; } // 导航属性
}
定义一个派生自 System.Data.Entity.DbContext 的上下文,用于创建查询和保存数据的会话。
添加派生的上下文 BloggingContext 并且继承 DbContext。
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public BloggingContext() : base("BloggingContext")
{
}
}
数据库连接字符串:
<connectionStrings>
<add name="BloggingContext"
providerName="System.Data.SqlClient"
connectionString="Server=localhost;Initial Catalog=数据库名称;User ID=用户名;Password=密码;MultipleActiveResultSets=True;"/>
connectionStrings>
此实例将创建上下文的新实例,并使用它来插入一条 Blog 记录。然后使用 LINQ 查询数据库中检索并遍历输出所有 Blog 记录。
internal class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
// 创建和保存一个Blog实例
Console.Write("输入 Blog 的名称: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
// 遍历 Blog 所有记录
var query = from b in db.Blogs
orderby b.Name
select b;
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.ReadKey();
}
}
}
在数据库生成 Blogs 和 Posts 表,并且 Blogs 表添加了一条数据。
Entity Framework 6.0 CodeFirst 提供迁移功能,迁移功能能够以递增方式更新数据库架构,使其与应用程序的数据模型保持同步,同时保留数据库中的现有数据。
在 Visual Studio 开发工具打开“工具”>“NuGet 包管理器”>“包管理器控制台”,输入Enable-Migrations 命令。
PM> Install-Package EntityFramework
项目出现一个新的 Migrations 文件夹,该文件夹包含 Configuration.cs 和 <以时间时戳命名>_InitialCreate.cs 两个文件,如下图所示。
现在我们想给 Blog 实体添加一个 Url 属性。
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; } // Url 属性
public virtual List<Post> Posts { get; set; }
}
通过程序包管理器控制台运行 Add-migration AddUrl 命令,命令格式:Add-migration 命令描述。
项目的 Migrations 文件夹出现 202303110948369_AddUrl.cs 文件,一般情况下我们不改动这个文件。
通过程序包管理器控制台运行 Update-database 命令,将所有待定迁移应用到数据库。
迁移成功,Blogs 表出现Url字段,同时迁移记录表 __MigrationHistory 也新增迁移信息。