接触过EF的应该都知道EF的编程模型目前有3种。

  • DataBase First:数据库先行
  • Model First:模型先行
  • Code First:代码先行

Code First可以在还没有建立数据库的情况下就开始编码,然后通过代码来生成数据库。

首先来编写个简单的学生(Student)类。通常叫着实体类,最后会生成数据库中的表

    class Students{[Key]public int stuId { get; set; }public string stuName { get; set; }public string stuAdress { get; set; }public int stuAge { get; set; }}

连接上下文DbContext

   class StuDbContext : DbContext{public DbSet<Students> student { get; set; }}

然后添加一个方法,用于向数据库添加数据

     static void Add(){Students st = new Students { stuAdress = "中关村", stuAge = 20, stuName = "刘德华" };using (StuDbContext db = new StuDbContext()){db.student.Add(st);db.SaveChanges();}}

然后就是Main方法

    static void Main(string[] args){Add();Console.WriteLine("成功");Console.ReadKey();}

程序运行成功后,数据库已经创建了,这里我要说的是,如果你跟我一样是vs2012,本地数据库没有.\sqlexpress,也就是说连接数据库的服务器名称是

local或者就是一个点 .

当你连接数据库的后,明明代码运行成功却没生成数据库而纠结的时候,当时我也是同样的问题。原因很简单。

因为我们没有显示指定连接数据库字符串,Code First会默认生成到 .\sqlexpress,但你本地并没有 .\sqlexpress 这个时候EF就会在 localdb 下生成数据库,其实

当你安装vs2012的时候就已经给你默认安装了 localdb数据库,就像我们安装vs2010的时候默认安装了express版本的数据库,你可以找到路径:C:\Program Files\Microsoft

SQL Server\110\LocalDB 这就是localdb。那代码运行成功。我们连接数据库,服务器名称用:(localdb)\v11.0  身份验证用:windows身份验证  连接即可

成功后看数据库,并查询刚插入的数据


也许你会疑问 ,那刚生成的数据保存在哪里了,保存在你桌面的用户文件下,

在实际项目中是不会这样搞的。一般都会配置数据库连接字符串。那该怎么配置呢,vs2012建项目时,默认生成了一个App.config配置文件,如果没有的话你可以手动添加

应用程序配置文件。

  <connectionStrings><add name="stuDb" connectionString="server=.;database=StudentInfo;Trusted_Connection=true" providerName="System.Data.sqlClient"/></connectionStrings>

ps:连接字符串中的Trusted_Connection:Trusted_Connection=false/no时,在连接中要必须指定密码和用户名,当没指明Trusted_Connection的值时,默认是false/no。当Trusted_Connection=true/yes时。说明server database已设置为用信任连接了,连接中可以不用指明用户名和密码(当然:你指定用户名和密码也不会去验证。是多此一举)。此时将使用当前的 Windows 帐户凭据进行身份验证。

上面写的后。数据库生成的位置是sql安装的位置。如果这样写:

 <add name="sutDb" connectionString="Data Source=.;database=Demo;uid=sa;pwd=123;AttachDBFilename=|DataDirectory|\Demo.mdf;" providerName="System.Data.SqlClient"/>

解释:

|DataDirectory| 是指 App_Data目录
Data Source=|DataDirectory|\Demo.mdf
其中|DataDirectory|默认是映射为App_Data的目录。
如 果名为 DataDirectory 的物理目录必须作为元数据路径列表的成员传递,则应在该名称的一边或两边添加空格,

例:Metadata="DataDirectory1 | DataDirectory | DataDirectory2"。ASP.NET 应用程序将 |DataDirectory| 解析为“<应用程序根目录>/app_data”文件夹。

AttachDBFilename=|DataDirectory|\Demo.mdf设定了数据库文件的存放位置:在项目根目录的App_Data文件夹下。

然后修改上下文类  StuDbContext

class StuDbContext : DbContext
{
    //配置文件中为stuDb的连接字符串,如果没找到,就会以stuDb做为数据库名,创建数据库。   但如果写成name=stuDb格式。当没找到会报异常,No connection string named 'stuDb' could be found in the application config file.
public StuDbContext() : base("stuDb")    { } 

  public DbSet<Students> student { get; set; }

 }

然后运行程序,看看效果

接下来看更新 删除 查找 数据

用过的朋友就知道。code first的查询和添加数据跟DB first,Moedel first一样,不同的是删除和更新。不过都差别不大,先看查询方法

 static void Select(){StudentContext db = new StudentContext();var student = from su in db.studentselect su;foreach (var item in student){string result = string.Format("{0}\t{1}\t{2}\t{3}", item.stuId, item.stuAge, item.stuAdress, item.stuName);Console.WriteLine(result);}//同样可以查询var st = from su in db.studentselect new{name = su.stuName,age = su.stuAge,id = su.stuId,adress = su.stuAdress};st.ToList().ForEach(item => Console.WriteLine(item));Console.ReadKey();}

看运行后的结果图

更新数据我们同时用ObjectContext和DbContext来尝试,因为DbContext可以转换为ObjectContext,我们修改记录如下:刘德华改成释小龙,地址改为香港,年龄还是20。

        /// <summary>/// 修改数据/// </summary>static void Update(){//修改数据是根据主键来找数据的。这也说明建表必须要有keyStudent st = new Student();st.stuId = 1;  //根据id找到记录st.stuName = "释小龙";st.stuAdress = "香港";st.stuAge = 20;StudentContext db = new StudentContext();//修改方式一:把DbContext转换成ObjectContext进行数据库更新ObjectContext context = ((IObjectContextAdapter)db).ObjectContext;  //IObjectContextAdapter所需命名空间:using System.Data.Entity.Infrastructure
            db.student.Attach(st);context.ObjectStateManager.ChangeObjectState(st, EntityState.Modified);  //db.SaveChanges();//修改方式二:直接用DbContext更新db.student.Attach(st);  //待更新的数据附加到db。也就是上下文db.Entry(st).State = EntityState.Modified; //EntityState 得引用 System.Data.Entity    告诉上下文。状态是修改。 同理把EntityState.Deleted就是删除。//db.Entry<Student>(st).State = EntityState.Modified;db.SaveChanges();  //保存}

OK 继续,看数据库并且查询看结果

<?xml version="1.0" encoding="utf-8"?>
<!--有关如何配置 ASP.NET 应用程序的详细信息,请访问http://go.microsoft.com/fwlink/?LinkId=301880-->
<configuration><configSections><!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --><section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /></configSections><appSettings><add key="webpages:Version" value="3.0.0.0" /><add key="webpages:Enabled" value="false" /><add key="ClientValidationEnabled" value="true" /><add key="UnobtrusiveJavaScriptEnabled" value="true" /></appSettings><connectionStrings><add name="EFDbContext" connectionString="Data Source=.;Initial Catalog=数据库;User ID=SA;Password=123456" providerName="System.Data.SqlClient" /></connectionStrings><system.web><compilation debug="true" targetFramework="4.5.1" /><httpRuntime targetFramework="4.5.1" /></system.web><entityFramework><defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /><providers><provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /></providers></entityFramework>
</configuration>

View Code

好了,这里记录的是我在这几天揣摩过程中一些不惑的知识。同时也是很简单入门的知识点,园子里关于code first的详细介绍已经有很好的文章了,不过学习有好的资料还不够。还要你有好学习态度和专研精神。这里推荐两个链接,好好学咯!

http://www.cnblogs.com/zhisong

http://www.cnblogs.com/Gyoung/

转载于:https://www.cnblogs.com/nsky/archive/2013/02/05/2892459.html

EF Code First建库 增删改查相关推荐

  1. Oracle: 一、Oracle简介,安装,基本使用,建表增删改查,数据类型及常用命令...

    内容简介 一.Oracle简介,安装,基本使用,建表增删改查,数据类型及常用命令. 技术与环境 操作系统: windows 语言类别: SQL之PL/SQL 特别鸣谢: 由马云涛老师提供资料 数据库: ...

  2. python+sqlite3-数据库增删改查操作

    python+sqlite3-数据库增删改查操作 目录 python+sqlite3-数据库增删改查操作 01.sqlite数据库 02.下载数据库可视化工具 03.创建数据库 04.python连接 ...

  3. 使用EF框架实现MVC的增删改查功能!!!Entity Framework

    一.什么是EF? ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.ADO.NET Entity Fram ...

  4. day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作...

    在Navicat中把已经生成的表逆向成模型 数据库上,右键-逆向数据库到模型 ego笔记: 增删改查 文件夹(库)增create database day43 charset utf8;改alter ...

  5. python操作redis--------------数据库增删改查

    安装第三方模块redis import redis 一.连接数据库,操作增删改查 ***操作string类型 1.连接数据 (1).host必填 服务器IP (2).端口号默认的事6379,可以不填写 ...

  6. EF 5.0 帮助类 增删改查

    原文地址:http://www.cnblogs.com/luomingui/p/3362813.html EF 5.0 帮助类 加入命名空间: using System; using System.D ...

  7. MySQL-数据库增删改查

    查询数据库:show databases; 创建数据库:create database 库名; 删除数据库:drop database 库名 创建表:create table 表名(字段名 数据类型[ ...

  8. java的mysql分页查询语句怎么写_java的mysql连库 增删改查语句、分页查询语句大全...

    //代码复制出来,修改一下bean,加载一下jar包,能直接用的,不懂加我Q 983331283 package cn.tootoo.entity; public class Page { priva ...

  9. 视频教程-.NET MVC5—60分钟快速入门学会《增删改查》-.NET

    .NET MVC5-60分钟快速入门学会<增删改查> 从事软件开发7年,熟悉软件开发流程,精通WEB系统程序开发.先后参与随州公安无纸化办公软件.速成会计财务管理软件.明源地产ERP等重大 ...

最新文章

  1. MongoDB 访问控制
  2. ORB-SLAM2中生成金字塔提取FAST角点和计算BRIEF描述子
  3. python人脸照片分类_Python OpenCV 人脸识别(一)
  4. ant中的table和pagination表格分页结合使用 手写分页
  5. 前端学习(2965):路由环境的搭建
  6. 【linux】xx is not in the sudoers file 解决办法
  7. ICCV 2021 | FACIAL :动态谈话人脸视频生成,姿态,眨眼皆可控!
  8. android4.04版本微信,微信旧版本6.3.27v6.3.27 老版本 Android
  9. 加法C语言基础程序,C语言菜鸟基础教程之加法
  10. RecyclerView 实现横向滚动效果
  11. 多行文本垂直居中的三种方法
  12. 【2021年更新】面向通信技术的机器学习和深度学习文献汇总
  13. 添加远程连接 Linux数据库与Navicat数据库建立连接
  14. 平均年薪60.8万,程序员拿下这个证书有多吃香?!
  15. 使用swiper插件时不会自动轮播
  16. mysql 1265警告
  17. 深入剖析Netty之定时任务实现
  18. IP-guard助力防御incaseformat蠕虫病毒
  19. swf格式的视频不能出声的解决办法
  20. 03、web前端简介

热门文章

  1. rabbitmq实战指南_太香了这份架构解密:从分布式到微服务(第二版),神仙进阶指南...
  2. CNN提取文本特征,融合PMF模型实现推荐系统
  3. Focal loss及其实现
  4. loss函数之MultiLabelSoftMarginLoss
  5. java 运行scala_使用java命令运行scala代码
  6. Java设计模式透析之 —— 单例(Singleton)
  7. [转载]Qt之自定义界面(二)添加最小化、关闭按钮、添加背景
  8. html2canvas 在qq保存失败_QQ的截图功能,没想到这么好用!
  9. html range 样式,美化 input range 控制条
  10. 虚拟大师怎么修改手机_手机虚拟大师,打造一个属于你的专属手机平台