利用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

     public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
}

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中新建一个类如下:

     public class ProjectContextInitializer:DropCreateDatabaseAlways<ProjectContext>
{
protected override void Seed(ProjectContext context)
{
context.Person.Add(new Person { Name = "卡特琳娜" });
base.Seed(context);
}
}

然后在Application_Start()中调用:

Database.SetInitializer(new ProjectContextInitializer());

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

.net Entity Framework初识1的更多相关文章

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

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

  2. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  3. Entity Framework Core 1.1 升级通告

    原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...

  4. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  5. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  6. 来,给Entity Framework热热身

    先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...

  7. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  8. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  9. Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新

    因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...

随机推荐

  1. Android开发学习之路--Activity之初体验

    环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...

  2. 【Unity Shaders】游戏性和画面特效——创建一个夜视效果的画面特效

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  3. Android的GridView的用法-android学习之旅(二十七)

    Gridview简介 GridView和ListView有相同的父类AbsListView.他和ListView唯一的区别是Gridview可以显示多列,如果不设置列数,就默认显示一列,变成了List ...

  4. 【一天一道LeetCode】#206. Reverse Linked List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Reverse ...

  5. 【一天一道LeetCode】#169. Majority Element

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  6. 学习笔记7-Android短信发送器

    新建一个Android项目sns. 在String.xml添加文字 <resources> <stringname="app_name">Sns发送短信&l ...

  7. 用 Freemarker 生成 word 文档

     阅读目录 添加图片 自定义载入模板 1.       用word写一个需要导出的word模板,然后存为xml格式. 2.       将xml中需要动态修改内容的地方,换成freemarker的 ...

  8. 1017. Queueing at Bank (25) - priority_queuet

    题目如下: Suppose a bank has K windows open for service. There is a yellow line in front of the windows ...

  9. STL:deque用法详解

    deque函数: deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素.但它又与vector不同,deque支持高效插入和 ...

  10. Spring AOP 初探

    本文可作为北京尚学堂spring课程的学习笔记 首先谈谈什么是AOP 它能干什么 AOP Aspect Oriented Programming(面向切面的编程) 什么叫面向切面? 就是我们可以动态的 ...