1.什么是codefirst

EF4.1中开始支持Code First 。这种方式在领域设计模式中非常有用。使用Code First模式,你可以专注于领域设计,根据需要,为你一个领域的对象创建类集合,而不是首先来设计数据库,然后来根据数据库设计你的类,Code-First APis将会基于你的类和配置,为你创建数据库

2.我的第一个codefirst实例

  1)添加NuGet程序包EF(直接输入EF即可)

  2)创建一个类 EFDbContext 并继承与 DbContext,该类派生自System.Data.Entity。DbContext类,如下所示。派生DbContext的类在实体框架中称为context类。

  3)在model中创建实体类(用于映射到数据库)

  4)在EFDbContext 中定义要创建上下文的模拟生成器(通过对生成数据库时的一些约定)

  5)在EFDbContext 中定义DbSet集合(这些集合在创建派生类的实例时自动初始化)

  6)在web.config中添加连接数据库的字符串

  7)创建控制器,并调用上下文,运行(运行后可以在连接字符串所指定地址的数据库查看创建的数据库)

代码如下:

  EFDbContext :

using Entitys;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions; namespace CodeFirst2.Context
{
public class EFDbContext : DbContext
{
//调用父类的一个参数的构造函数初始化实例
//指定数据库,如果不指定,会在项目"App_Data"中自动生成
public EFDbContext() : base("EFDbContext") { } /// <summary>
/// 生成数据库
/// 通常,在创建派生上下文的第一个实例时仅调用此方法一次。
/// 然后将缓存该上下文的模型,并且该模型适用于应用程序域中的上下文的所有后续实例。
/// 通过在给定的 ModelBuidler 上设置 ModelCaching 属性可禁用此缓存,但注意这样做会大大降低性能。
/// 通过直接使用 DbModelBuilder 和 DbContextFactory 类来提供对缓存的更多控制。
/// </summary>
/// <param name="modelBuilder">定义要创建的上下文的模型的生成器。</param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//去除“设置表明为复数的约定”
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
} //这些集合在创建派生类的实例时自动初始化
public DbSet<People> Peoples { get; set; }
public DbSet<PeoType> PeoTypes { get; set; }
}
}

  实体代码:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace Entitys
{
public class People
{
[Key]//主键
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]// 在插入行时,数据库将生成值
public Guid Id { get; set; }
public string Name { get; set; }
public string Age { get; set; }
public DateTime CreateDate { get; set; }
public int Type { get; set; } public virtual ICollection<PeoType> PeoTypes { get; set; } = new List<PeoType>();
}
}
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace Entitys
{
public class PeoType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
}
}

  控制器:

using CodeFirst2.Context;
using System.Web.Mvc; namespace CodeFirst2.Controllers
{
public class DefaultController : Controller
{
// GET: Default
public ActionResult Index()
{
EFDbContext db = new EFDbContext();
return View();
}
}
}

  web.config:

<connectionStrings>
<add name="EFDbContext" connectionString="server=.;uid=sa;pwd=svse;database=EFDemo;" providerName="System.Data.SqlClient" />
</connectionStrings>

先实现第一个实例,后面将逐个讲解

2.第一个Codefirst实例的更多相关文章

  1. Week2(9月19日):增加一个CodeFirst的例子来说明

    Part I:提问  =========================== 1.上堂课中我们使用了()数据库,它是()可部署的,只需要将相应的()文件添加到应用程序的()文件夹,就可以使用了,该数据 ...

  2. Android 只开启一个Activity实例

    在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...

  3. 将oracle冷备份恢复到另外一个数据库实例中

    因更换服务器需要将Oracle数据库转移到另外台Oracle中.说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不一 ...

  4. 第一个python实例--监控cpu

    #第一个python实例:监控cpu #/bin/bash/env Python from __future__ import print_function from collections impo ...

  5. servlet的一个web容器中有且只有一个servlet实例或有多个实例的理解1

    servlet的一个web容器中有且只有一个servlet实例或有多个实例的理解 (2013-06-19 19:30:40) 转载▼     servlet的非线程安全,action的线程安全 对提交 ...

  6. 12C RAC中的一个数据库实例自动crash并报ORA-27157、ORA-27300等错误

    rhel7.2上安装12C RAC数据库后,其中一个数据库实例经常会自动crash.查看alert日志发现以下错误信息: Errors in file /d12/app/oracle/diag/rdb ...

  7. 一个 XSD 实例

    一个 XSD 实例 本节会为您演示如何编写一个 XML Schema.您还将学习到编写 schema 的不同方法. XML 文档 让我们看看这个名为 "shiporder.xml" ...

  8. Asp.Net MVC是否针对每次请求都重新创建一个控制器实例

    一.Asp.Net MVC是否针对每次请求都重新创建一个控制器实例 默认情况下,答案是确定的. ControllerBuilder类 ControllerBuilder.Current用户获取默认的控 ...

  9. 如何让Windows程序只运行一个程序实例?

    要实现VC++或者MFC只运行一个程序实例,一般采用互斥量来实现,即首先用互斥量封装一个只运行一个程序实例的函数接口: HANDLE hMutex = NULL; void MainDlg::RunS ...

随机推荐

  1. python 的set定义

    set是集合,跟数学中的集合一样不能重复没有顺序 set定义有两种方式 1. b=set([1, 2, 3, 4]) 2. a={"} 输出: b=set([1, 2, 3, 4])a={1 ...

  2. Vue.js----更换头像不实时更新问题

    原因 导致问题的原因是缓存造成的,因为你图片变了但是读取头像的地址还会没有变化的 解决思路 所以解决的思路就是上传之后让图片地址改变,那么我们就可以在上传的时候给地址加上一个时间戳那么久可一达到目的了 ...

  3. PCB学习

    一.PCB设置 在线DRC:自动更正,会提示短路. 对象捕捉>>智能元件snap,可以智能抓取中心点,勾选 智能TrackEnds: 撤销重做:30步 旋转步骤:90.000(可以按空格旋 ...

  4. linux0.11内核源码——用户级线程及内核级线程

    参考资料:哈工大操作系统mooc 用户级线程 1.每个进程执行时会有一套自己的内存映射表,即我们所谓的资源,当执行多进程时切换要切换这套内存映射表,即所谓的资源切换 2.但是如果在这个进程中创建线程, ...

  5. BZOJ 2547: [Ctsc2002]玩具兵(二分答案+二分图匹配)

    传送门 解题思路 可以发现天兵不用管,答案的一个上界是\(2*k\),就是天兵一个个换.刚开始写了个拆\(6\)点的网络流,调了半天发现自己假了..说说正解,首先可以发现交换士兵其实就是种类的交换,那 ...

  6. 简记 jQuery 插件模板

    /** * @lisence jquery plugin demo v1.0.0 * * author: Jeremy Yu * * description: * this is a jquery p ...

  7. js中的$符

    js中的$代表什么意思呢? 首先js的作用是什么呢?是修饰网页动态内容的.那么修饰就需要定位主题,比如你把html比喻一个美女,让她唱一首歌.那么首先你要定位出是你想让哪个美女唱歌,通常我们用id来定 ...

  8. 20175213 2018-2019-2 《Java程序设计》第11周学习总结

    教材学习内容总结 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对象的应用程序称作客户端程序 U ...

  9. 五. jenkins部署springboot项目(2)--windows环境--服务

    前提:jenkins和springboot运行在同一台机器 springboot 通过winsw部署为服务 winsw 下载地址:https://github.com/kohsuke/winsw/re ...

  10. PS操作

    笔:B 橡皮:E 新建:C+N 选取套索:L 套索后按Alt,移动 放大:Ctrl + “+” 或 Z 缩小:Ctrl + “-” 或 Alt Z / Alt ,然后用滑轮控制大小 撤销:Ctrl + ...