您的位置:首页 > 编程语言 > C#

Code First的migration应用

2015-09-25 16:40 477 查看
在采用Code First模式开发C#系统时,可以采用执行migration指令来将实体模型的变化同步到数据库中,在实际应用过程中,更多的是连接到SQLServer而非SQL Express或LocalDB,各大网站和博客以及微软的www.asp.net已经清楚的告诉了处理步骤,这里就谈谈需要注意的事项:

1、Migration系列指令是针对包含DbContext派生类的项目进行的,与实体类项目可以不在同一个项目。

2、DbContext所在项目必须引用了Entity Framework,而实体类所在项目可以不引用Entity Framework。

3、Migration系列指令指定的项目必须包含App.config或Web.config文件,在该文件中需要包含如下代码:

<connectionStrings>
<add name="VmeDbContext" providerName="System.Data.SqlClient" connectionString="server=localhost;database=YiBusiness;uid=vme;pwd=123qweASD" />
</connectionStrings>


4、若配置文件中的ConnectionString的name与DbContext派生类名称不同,则需要该派生类中传入name值,如下:

using System.Data.Entity;
using VME.Data.Entity;

namespace VME.Data.Access
{
public class VmeDbContext : DbContext
{
/// <summary>
/// 设定数据库连接串名称
/// </summary>
public VmeDbContext() : base("VmeDbContext")
{

}
public DbSet<User> Users { get; set; }

public DbSet<MobileDevice> MobileDevices { get; set; }

public DbSet<Account> Accounts { get; set; }
}
}


Migration指令解释:

1、enable-migrations -projectName <ProjectName> -connectionString <ConnectionString> -connectionprovidername <ConnectionProviderName>

功能:项目启动Migration功能的第一步必须执行的操作。 执行该方法会生成Migrations目录及其下的Configuration.cs文件,有时还会产生一个初始化的cs文件

参数: -projectName 指需要执行Migration操作的项目。

-connectionString 指数据库连接字符串。

-connectionprovidername 数据连接提供商名称。

上述三项就是App.config文件中ConnectionString节点需要设置的信息,也就是说,若你没有App.Config或Web.Config文件,可以通过在参数中给出这些数据获得同样的效果。

2、add-migration -name <Name> -projectName <ProjectName> -connectionString <ConnectionString> -connectionprovidername <ConnectionProviderName>

功能:根据实体对象生成数据库结构变化的cs文件。

参数: -name 生成的cs文件名的格式为:时间戳_name.cs。

3、update-database -projectName <ProjectName> -connectionString <ConnectionString> -connectionprovidername <ConnectionProviderName>

功能:执行由add-migration生成的代码,确保目标数据库与实体类结构一致。

关于Migration更为详细的信息请进入“程序包管理器控制台”,输入下列代码:

get-help enable-migrations -detailed

get-help add-migration -detailed

get-help Update-Database -detailed
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息