zoukankan      html  css  js  c++  java
  • Entity Framework笔记(一)

    最近在看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脚本生成);不需要写插入语句和查询语句了。框架为我们完成了对象和数据的关系映射。但是,问题来了,我们在项目中,不可能只用到插入和查询所有数据这两种简单的操作。我们还需要删除,修改,按条件查询等等复杂的数据库操作呢。

    待续.....

  • 相关阅读:
    Nginx浅谈
    MySQL 规范
    使用nginx反向代理实现隐藏端口号
    -bash: /etc/profile: line 11: syntax error near unexpected token `$'{ ''报错问题解决
    为什么禁止在 foreach 循环里进行元素的 remove/add 操作
    Java中String字符串常量池
    前端学习路径
    Linux关闭防火墙命令
    CXF实现webService服务
    Jquery Ajax 的例子。
  • 原文地址:https://www.cnblogs.com/gxwang/p/4762264.html
Copyright © 2011-2022 走看看