• EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手


    ----------------------------目录------------------------------

    EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性 (2015-07-22 17:30)

    EntityFramework 5.0 CodeFirst 教程02-删除和修改/架构改变异常的处理 (2015-07-14 17:50)

    EntityFramework 5.0 CodeFirst 教程01-搭建环境和快速上手 (2015-07-13 10:48)

    ----------------------------目录------------------------------

        网上关于EntityFramework 5.0的教程很多,但是大多数都是代码整理不清晰,有些甚至是拷贝,代码丢失等问题,本人最近也有一个项目是用到EntityFramework 5.0 并且是code first的使用方式,鉴于这个在谷歌上面找了一本国外人写的code first的电子书,英文版的,配合着电子词典看下去,感觉不错,写的非常清晰有条理,所以分享给大家。

        首先是电子书的下载,如果想只看电子书的朋友,可以直接下载下来,不用再往下读了。
        下载地址,百度网盘:http://pan.baidu.com/s/1bne2QsR
        本教程只适合使用,所以一开始就上代码了,如果想掌握各种理论的朋友,可能不适合继续阅读下去,如果想快速地使用上EntityFramework 5.0 CodeFirst ,可以阅读下去
        创建一个.NET 4.5的控制台应用程序,本人使用的VS 2013 建议读者也使用这个IDE
       
        就是一个控制台应用程序,下面引用EntityFramework.dll 
        首先我们来创建一个Person的类,只有 有姓FirstName 和名LastName 还有主键ID(PersonId)
      一切从简单开始,不大喜欢像其他教程一样,例子都搞得非常复杂,例子应该要抓住核心,排除其他的和主题不关的 bamn.cn
        整个类如下: 
     
     public class Person
        {
            public int PersonId { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
        我们再创建一个PersonContext 上下文类,需要继承DbContext
     
    public class PersonContext : DbContext
        {
            public PersonContext()
                : base("name=dblink")
            {
            }
            public DbSet<Person> People { get; set; }
        }
       细心的同学可能看到构造方法后面的base("name=dblink") 这里的dblink就是数据库连接名称了 看下面的配置文件就清楚了
    然后就是数据库的连接了,在配置文件app.config中添加链接字符串
       <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="dblink"
        connectionString="Data Source=.MSSQLSERVER2008;Initial Catalog=EFDemo;User ID=sa;Password=123321;"
        providerName="System.Data.SqlClient"/>
      </connectionStrings>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    </configuration>
        
      下面我们就对数据库进行操作了,首先是创建数据库,创建数据库试用EF只需要一句代码就可以了,EF会帮我们将数据库还有数据表创建好的
    我们在program.cs的main方法中添加下面代码
     
    class Program
        {
            static void Main(string[] args)
            {
                using (var personContext = new PersonContext())
                {
                    //如果不存在数据库则创建
                    bool res = personContext.Database.CreateIfNotExists();
                }
                Console.ReadKey();
            }
        }
    我们再查找数据库,发现已经自动地创建好了数据库还有表了,看下图:
     
    这里有一点要注意的:
       就是实体Person创建的时候,需要一个主键,这个主键必须是类名+ID 比如 这里的PersonId 如果你改成其他的比如
    你将类改为PersonModel 但是ID还是 PersonId 那么久会报下面的错误了,这里大家要注意的地方,还有就是这里的ID 可以写成Id都没问题的,这个应该是微软的EF框架约定俗成的一个地方吧。
     
    One or more validation errors were detected during model generation:
    System.Data.Entity.Edm.EdmEntityType: : EntityType 'PersonModel' has no key defined. Define the key for this EntityType.
    System.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'People' is based on type 'PersonModel' that has no keys defined.
     
    下面我们来添加一条数据到表中
     
     在main方法中加入下面代码
      
     //往数据库中添加数据
    var person = new Person
    {
        FirstName = "John",
        LastName = "Doe"
    };
    personContext.People.Add(person);
    personContext.SaveChanges();
    执行后 查询表发现记录已经添加进去了
     
    所有的操作基本都是通过这个context上下文来实现,比如添加记录,只需要add一个实体进去 然后再savechanges 这个方法执行后,EF才会将数据保存到表里面。
     
    下面再来获取表中的数据
     //获取数据
    var savedPeople = personContext.People;
    foreach (var p in savedPeople)
    {
        Console.WriteLine("Last name:{0},first name:{1},id {2}",
        p.LastName, p.FirstName, p.PersonId);
    }
    获取数据也很简单,这里是获取所有的记录,然后遍历就可以取得数据了,非常方便
    当我们执行多次刚才的代码的时候,EF会添加多条记录进去,并且ID也不一样了,ID主键是自增长的
     
     
     所有代码如下:
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var personContext = new PersonContext())
                {
                    //如果不存在数据库则创建
                    bool res = personContext.Database.CreateIfNotExists();
                    //往数据库中添加数据
                    var person = new Person
                    {
                        FirstName = "John",
                        LastName = "Doe"
                    };
                    personContext.People.Add(person);
                    personContext.SaveChanges();
                    //获取数据
                    var savedPeople = personContext.People;
                    foreach (var p in savedPeople)
                    {
                        Console.WriteLine("Last name:{0},first name:{1},id {2}",
                        p.LastName, p.FirstName, p.PersonId);
                    }
                }
                Console.ReadKey();
            }
        }
    }
    代码结构:
    本集源码:
     
       
  • 相关阅读:
    mapbox-gl开发:deck.gl轨迹图效果
    vscode双击选中单词,设置短横线不分隔
    CSS自定义滚动条样式,兼容IE浏览器
    flv 视频播放器
    mapbox、echarts实现地图流动效果
    echarts 小时图
    deckgl-triplayer流动效果
    vue使用flv视频监控组件
    qt学习中遇到的问题及处理方法
    GitHub入门
  • 原文地址:https://www.cnblogs.com/maijin/p/4642280.html
Copyright © 2020-2023  润新知