.net Entity Framework初识1
利用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的更多相关文章
- 基于.NET的微软ORM框架视频教程(Entity Framework技术)
基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲 ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- Entity Framework Core 1.1 升级通告
原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 来,给Entity Framework热热身
先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- Entity Framework教程(第二版)
源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...
- Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新
因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
随机推荐
- 学习TensorFlow,线性回归模型
学习TensorFlow,在MNIST数据集上建立softmax回归模型并测试 一.代码 <span style="font-size:18px;">from tens ...
- [Mysql]备份同库中一张表的历史记录 insert into ..select
需求 现在有个这么一个需求,mysql中有个表,数据增长的很快,但是呢这个数据有效期也就是1个月,一个月以前的记录不太重要了,但是又不能删除.为了保证这个表的查询速度,需要一个简单的备份表,把数据倒进 ...
- Asp.net实现下拉框和列表框的连动
走过了牛腩老师的新闻发布系统,漫游过了孙鑫老师的Html,在427沐浴第一缕冬日阳光的美丽月底,小编迎来了北大青鸟的Asp.net,北大青鸟,高大上的赶脚有么有,哈哈哈,开始了小编的.net之旅. 首 ...
- java设计模式---访问者模式
Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自 己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自 ...
- Java 实现的各种经典的排序算法小Demo
由于有上机作业,所以就对数据结构中常用的各种排序算法都写了个Demo,有如下几个: 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 选择排序 桶排序 Demo下载地址 下面谈一谈我对这几个排 ...
- Cocos2D:塔防游戏制作之旅(七)
用这3个变量,你可以创建多种不同类型的炮塔,它们可以有着不同的攻击属性,比如长距离重型攻击力,但是慢速攻击的炮塔,或者是渴望快速攻击但是攻击范围近的炮塔. 最后,代码包括了一个draw方法,它在炮塔周 ...
- leetcode 217 Contains Duplicate 数组中是否有重复的数字
Contains Duplicate Total Accepted: 26477 Total Submissions: 73478 My Submissions Given an array o ...
- 【一天一道LeetCode】#61. Rotate List
一天一道LeetCode系列 (一)题目 Given a list, rotate the list to the right by k places, where k is non-negative ...
- Python3.4 + Django1.7.7 搭建简单的表单并提交
后面还有一个问题,是我把txt生成了,但是网页没有返回我还不知道,现在怎么直接返回txt并且展示出来txt 的内容,希望大牛不吝赐教 首先有一个问题 django1.7之前,这样用: HttpResp ...
- 《java入门第一季》StringBuffer类小案例
/* * 把数组拼接成一个字符串 */ public class StringBufferTest2 { public static void main(String[] args) { // 定义一 ...