利用EF可以直接操纵数据库,在一些简单的项目里甚至完全不用写sql。

一 code first

1、在web.config中设置连接字符串

这一步可以省略。如果跳过这一步,程序会默认生成一个可用的连接字符串,生成的数据库文件放在程序根目录的App_Data中。

   <configuration>  <connectionStrings><add name="conn" connectionString="Data Source=数据源; Initial Catalog=数据库; Integrated Security=True; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> <!--MultipleActiveResultSets是设置连接可重用,提高效率--> </connectionStrings></configuration>

2、在Models中新建一个类Person.cs

1     public class Person
2     {
3         public int ID { get; set; }
4         public string Name { get; set; }
5         public string Remark { get; set; }
6     }

3、在Controllers中新建一个 包含视图的MVC5控制器(使用Entity Framewok)

控制器名称:HomeController

 模型类:选择刚刚新建的Person类

数据上下文:点击新建数据上下文,并把默认选中的部分改成所需的名字如,Project

最后勾选 生成视图,点击添加按钮,VS就在为我们搭建基架了。

此时:

Controllers文件夹多了一个HomeController,里面包含了一些增删改查的基本方法;

Models文件夹多了一个ProjectContext.cs文件,里面有个构造函数publicProject():base("name=ProjectContext"),把name改成第一步中连接字符串的name。

Views文件夹多了5个视图。

这时我们打开Index.cshtml视图,运行程序后可以发现,数据库中多了一个库,名字就是web.config中设置的名字,其中有两张表,一个叫__MigrationHistory,一个叫People(本来应该是Person,但是VS自动使用了Person的复数People。最终的标明是依ProjectContext.cs中属性名而定的)。

__MigrationHistory表是EF用来检测模型类的变化。可以放心的删除它,此时EF假设我们知道自己在做什么,。一旦删除它,我们就要手动保持数据库与模型类的匹配。

当模型和数据库不一致时

(一)销毁数据库并重建

在Application_Start()中调用EF的静态方法:

 Database.SetInitializer(new DropCreateDatabaseAlways<myProjectContext>()); //每次运行都重建
 或者Database.SetInitializer(new DropCreateDatabaseIfModelChanges<myProjectContext>()); //当模型改变时重建

其中Database类位于Sysem.Data.Entity命名空间下。

销毁并重建数据库将无法保留数据库中的数据,因此这种方法主要是为应用程序生命周期早期阶段的迭代和快速变化提供便利的。

一旦发布一个实际网站并采用真实的客户数据,就不能每次都销毁数据库了。

重新创建的新库,在开发的时候经常需要插入一两条数据进行调试,可以重写DropCreateDatabaseAlways或者DropCreateDatabaseIfModelChanges的Seed方法:

首先在App_Start中新建一个类如下:

1     public class ProjectContextInitializer:DropCreateDatabaseAlways<ProjectContext>
2     {
3         protected override void Seed(ProjectContext context)
4         {
5             context.Person.Add(new Person { Name = "卡特琳娜" });
6             base.Seed(context);
7         }
8     }

然后在Application_Start()中调用:

Database.SetInitializer(new ProjectContextInitializer());

这样会在每次运行程序时的第一次与数据库交互时,销毁原库、创建新库之后默认插入Seed中的数据。

转载于:https://www.cnblogs.com/dengshaojun/p/4241045.html

.net Entity Framework初识1相关推荐

  1. 初识Entity Framework CodeFirst(3)

    前两回合,我们讨论学习了如何采用Entity Framework在没有数据库的情况下自己写一些实体类,然后通过CodeFirst反向生成对应的数据库.通过CodeFirst,我们摆脱了edmx文件,没 ...

  2. 初识Entity Framework CodeFirst(2)

    上一回合,我们讨论了如何简单的使用Entity Framework CodeFirst功能. 结尾的时候,我们提出了一个有趣的问题,如果我们的数据实体需要发生变化呢?需要添加多一个Model类呢?修改 ...

  3. 基于.NET的微软ORM框架视频教程(Entity Framework技术)

    基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲  ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...

  4. EF-Entity Framework 相关技术点收集贴

    不定期.偶尔.添加更新 在网络上看到或者自己开发过程中碰到的EF-Entity Framework相关技术点 本文地址:http://www.cnblogs.com/vnii/archive/2012 ...

  5. C#综合揭秘——Entity Framework 并发处理详解

    引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...

  6. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  7. Entity Framework Code First在Oracle下的伪实现

    为什么要说是伪实现,因为还做不到类似MsSql中那样完全的功能.Oralce中的数据库还是要我们自己手动去创建的.这里,我们舍掉了Model First中的EDMX文件,自己在代码里面写模型与映射关系 ...

  8. Entity Framework:Code-First Tutorial开篇

    这个系列文章是关于Entity Framework Code-First的英文系列文章,内容不错,每篇一个主题知识点介绍,特转载过来 原文地址:http://www.entityframeworktu ...

  9. entity framework 使用Mysql配置文件

    2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="utf-8"?> ...

  10. Entity Framework CodeFirst数据迁移

    原文:Entity Framework CodeFirst数据迁移 前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是"Database Fi ...

最新文章

  1. swift3.0友盟分享
  2. 深度学习100问-1:深度学习环境配置有哪些坑?
  3. C语言实现radon变换
  4. 让我们来谈谈JDBC
  5. vs的资源管理器中一次性添加整个文件夹
  6. Python深浅拷贝教程-面试必问内容
  7. JavaScript回调函数(callback)概念和应用,千万别错过!
  8. 「Swift」Swift与C++和Python
  9. Spring AOP 源码分析-寻找入口
  10. C# WINFORM的自动更新程序
  11. Dev C++安装第三方库boost
  12. 部门名称部门结构叠用_金属结构分公司三部门联合开展工会小组活动
  13. css背景图与html插入img的区别,css背景图与html插入img的区别
  14. npm install报gyp info it worked if it ends with ok
  15. 大型圆弧怎么处理_这种大圆弧一次成型,回弹怎么计算?低公差
  16. Qt例子学习笔记 - Examples/Qt-6.2.0/charts/callout
  17. swift学习二:基本的语法
  18. 什么是DHT网络(DHT network)
  19. java项目遇到风险漏洞示例与解决方案
  20. cocoapods最新踩坑以及更新

热门文章

  1. MyISAM存储引擎简介
  2. 信息存储服务公司Everlaw获810万美金注资
  3. 开源社群系统 ThinkSNS+ 0.7.4 版本发布
  4. Vue.js学习系列(八)---使用路由搭建单页应用(一)
  5. Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
  6. 用R和BioConductor进行基因芯片数据分析(三):计算median
  7. php连接postgresql数据库
  8. Visual Studio里的BUG??
  9. 只要听说过电脑的人都能看懂的网上pdf全书获取项目
  10. 哈希集合——hashSet