最近在看MVC方面的资料,看了几个教程都在使用Entity Framework做数据持久化。之前也听说过这个东西,在微软的网站上看过一个演示视频,但都没怎么去仔细研究。MVC的东西太庞大了,先慢慢熟悉着。但可以从其中的一个部分入手,先学习Entity FrameWork。当作笔记,哪天翻出来温故。
简单说,EF是一个ORM解决方案,是微软出的东西。这里,主要记录如何使用,至于它的来龙去脉,可以网上搜搜。现在就开始用VS2010创建Console项目,并且使用EF作为和数据库打交道的工具。VS2010中要使用EF框架的话,得先安装插件:NuGet,点击下面连接https://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c ,下载后安装即可。
新建Console项目,命名EFConsoleDemo。右键项目,此时看到菜单上有“管理NuGet程序包”项,点击后在弹出的窗体上搜索Entity Famework,点后面的安装。中间会弹出是否同意安装,点“我同意”完成即可。
右键项目,点击管理“NuGet程序包”
搜索到Entity Framework后,点后面安装(如未安装,绿色打勾的地方会有安装按钮)
此时我们看到项目中会多出一个pakages.config文件,展开引用,会发现多出几个EntityFramework相关的引用。这里记录的是EF的Code First模式的使用方。接下来配置数据库连接字符串,在App.config文件中添加如下配置:
<connectionStrings> <add name="UserDal" providerName="System.Data.SqlClient" connectionString="Data Source = localhost; Initial Catalog = TestDb; Integrated Security = true"/> </connectionStrings>
这里需要注意连接字符串的name属性,后面创建类的时候需要和这里的名字保持一致。接下来创建类,这里以一个简单的用户管理为例。假设用户表需要ID,UserName,UserPwd,Email,Tel字段,则需要创建一个User类,直接贴代码。ID上的[Key]属性表示该属性在数据库表中映射的字段是主键。
public class Users { [Key] public int UserId { get; set; } public string UserName { get; set; } public string UserPwd { get; set; } public string Email { get; set; } public string Tel { get; set; } }
接下来是重点,创建和数据库打交道的代码了。注意这里的类名UserDal,需要和App.config中连接字符串的name属性一致才可以。重写OnModelCreating方法,将上面的User类映射到数据库中的T_Users表中。
public class UserDal : DbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Users>().ToTable("T_Users"); base.OnModelCreating(modelBuilder); } public DbSet<Users> users { get; set; } }
回到项目中的Program.cs文件中,为User类创建实例,并将实例值插入数据库。
class Program { static void Main(string[] args) { OperationClass operation = new OperationClass(); Users user = operation.InitUser(); operation.SaveUser(user); operation.DisplayUsers(); Console.ReadKey(); } } public class OperationClass { public Users InitUser() { string userName = string.Empty; string userPwd = string.Empty; string Email = string.Empty; string Tel = string.Empty; Users user = new Users(); Console.WriteLine("Input UserName:"); userName = Console.ReadLine(); Console.WriteLine("Input UserPwd"); userPwd = Console.ReadLine(); Console.WriteLine("Input UserEmail"); Email = Console.ReadLine(); Console.WriteLine("Input UserTel"); Tel = Console.ReadLine(); user.UserName = userName; user.UserPwd = userPwd; user.Email = Email; user.Tel = Tel; return user; } public void SaveUser(Users user) { UserDal userDal = new UserDal(); userDal.users.Add(user); userDal.SaveChanges(); } public void DisplayUsers() { Console.WriteLine("Display All Users In The System:"); Console.WriteLine("***************************************************"); UserDal userDal = new UserDal(); List<Users> users = userDal.users.ToList(); foreach (Users item in users) { Console.WriteLine("UserName: {0}", item.UserName); Console.WriteLine("UserPwd: {0}", item.UserPwd); Console.WriteLine("UserEmail: {0}", item.Email); Console.WriteLine("UserTel: {0}", item.Tel); Console.WriteLine("*****------**********---------********"); } Console.WriteLine("All Users Displayed."); } }
运行项目。初次运行时,输入数据后,EF会自动在TestDb中创建T_Users表,并将输入的数据插入数据库中。Display方法中,调用了UserDal中users属性的ToList方法,获取数据表中的全部数据。因此,第二次输入数据时,会将第二条数据插入表中,并输出两条数据来。至此,在VS 2010中使用EF已经成功。为我们带来了些什么方便?首先,不用在数据库中创建表(或写sql脚本生成);不需要写插入语句和查询语句了。框架为我们完成了对象和数据的关系映射。但是,问题来了,我们在项目中,不可能只用到插入和查询所有数据这两种简单的操作。我们还需要删除,修改,按条件查询等等复杂的数据库操作呢。
待续.....