namespace WebEF.Model
{
public class ModelContext:DbContext //继承DBcontext 来自EF框架
{

public ModelContext() : base("name=配置文件名") { //读取配置文件

/*配置文件的设置格式

<connectionStrings>
<add name="配置文件名"
connectionString="Data Source=(. 、localhost、远程IP);Initial Catalog=数据库名;User ID=Sql账户;Password=密码;"
providerName="System.Data.SqlClient"/>
</connectionStrings>

*/
}

//一个类就是一张表

public DbSet<类名(表名)> 类(表)名{set;get;}//将对象储存在DbSet内存中
public DbSet<类名(表名)> 类(表)名 { set; get; }
public DbSet<类名(表名)> 类(表)名{ set; get; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity<类名(表名)>().ToTable("表名");//给数据库表取别名

modelBuilder.Entity<类名(表名)>().ToTable("表名");

modelBuilder.Entity<类名(表名)>().HasKey(p => new { p.StudentNo, p.CourseNo }).ToTable("表名");//p设置SCC的两个主键
}

}
}

DBFrist 是指数据库优先,将数据库映射成实体模型。

ModelFrist是指模式优先,将实体模映射成数据库。

CodeFrist 是利用C#代码生成数据库。

调用

//假设创建一张学生表和课程表则需要创建一个学生类和课程类如下

namespace WebEF
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var context = new ModelContext())
{

context.Database.CreateIfNotExists();

var student = new Student("10001","李四","男",20,"CS");//实例化学生类(学生表,添加一个学生信息)

var c = new Course//实例化课程类,(课程表,添加一门课程)

{
No=1,
Name="C语言",
PreNo=null,
Credit=3

};

context.Student.Add(student);//添加一条学生信息

context.Course.Add(c);//添加一门课程
context.SaveChanges();//保存更改把数据保存到数据库中

Response.Write("操作成功!");
}

}
}
}

学生类

namespace WebEF.Model
{
public class Student
{

private string no;
private string name;
private string sex;
private short age;
private string dept;

public Student() { }
public Student(string no, string name, string sex, short age, string dept)
{
this.no = no;
this.name = name;
this.sex = sex;
this.age = age;
this.dept = dept;
}
/// <summary>
/// [key]设置主键
/// No表示学号
/// </summary>
[Key]
public string No { get { return this.no; } set { this.no = value; } }

/// <summary>
/// 姓名
/// </summary>
public string Name { get { return this.name; } set{this.name=value;}}

/// <summary>
/// 性别
/// </summary>
public string Sex { set { this.sex = value; } get { return sex; } }

/// <summary>
/// 年龄
/// </summary>
public short Age { set { this.age = value; } get { return age; } }

/// <summary>
/// 所在系
/// </summary>
public string Dept { set { this.dept = value; } get { return dept; } }

[ForeignKey("StudentNo")]//设置外键
public virtual List<SCC> SCCs { set; get;}

}
}

课程类

namespace WebEF.Model
{
public class Course
{

/// <summary>
/// 课程编号
/// </summary>
[Key]
public int No { set; get; }

/// <summary>
/// 课程名
/// </summary>
public string Name { set; get; }

/// <summary>
/// 先修课编号
/// </summary>
///

public int? PreNo { set; get; }//?号表示值可以为空

/// <summary>
/// 课程xuef
/// </summary>
public short Credit { set; get; }

[ForeignKey("CourseNo")]//将课程编号设置为选课表的外键
//得到全部选修课程
public virtual List<SCC> SCCs { set; get; }

[ForeignKey("PreNo")]//将先修课设为课程的外键

//得到所有先修课
public virtual List<Course> Courses { set; get; }//获得所有先修课

}
}

选课表(为学生表和课程表的中间表,学生和课程之间是多对多的关系)

namespace WebEF.Model
{
public class SCC
{
/// <summary>
/// 学号
/// </summary>
///

public string StudentNo { set; get; }

/// <summary>
/// 选修课编号
/// </summary>
///

public int CourseNo { set; get; }

/// <summary>
/// 分数
/// </summary>
public int Grade { set; get; }

}
}

C# CodeFirst(EF框架)代码优先创建数据库的更多相关文章

  1. 在快速自定义的NopCommerce中使用实体框架(EF)代码优先迁移

    我看到很多nopCommerce论坛的用户问他们如何使用Entity Framework(EF)代码优先迁移来自定义nopCommerce,添加新的字段和entites核心.我实际上在做nopComm ...

  2. 结合实体框架(代码优先)、工作单元测试、Web API、ASP. net等,以存储库设计模式开发示例项目。NET MVC 5和引导

    介绍 这篇文章将帮助你理解在库模式.实体框架.Web API.SQL Server 2012.ASP中的工作单元测试的帮助下设计一个项目.净MVC应用程序.我们正在开发一个图书实体和作者专用的样例图书 ...

  3. EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...

  4. EF的代码优先设计

    CodeFirst 用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库 接下来用学生这个例子来演示,有学生表,课程表,和成绩表三张表 首先是M ...

  5. 使用T4模板为EF框架添加实体根据数据库自动生成字段注释的功能

    转自http://jeffblog.sinaapp.com/archives/501 首先我们先下载一个文件GetSummery,这里我提供了,大家可以直接下载:下载 我们在数据库建立一个表,并给表中 ...

  6. C# 的EF框架怎么连接Oracle数据库

    安装odp.net ODP.NET你不需要安装Oracle,不需要配置oracle.key文件,不需要配置TnsNames.Ora文件 不需要配置环境变量:完全的傻瓜式的在没有安装oracle数据库或 ...

  7. EF之Code First代码优先

    1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设 ...

  8. 从实体框架核心开始:构建一个ASP。NET Core应用程序与Web API和代码优先开发

    下载StudentApplication.Web.zip - 599.5 KB 下载StudentApplication.API.zip - 11.5 KB 介绍 在上一篇文章中,我们了解了实体框架的 ...

  9. 动态切换数据库(EF框架)

             文章简略:本文测试项目为Silverlight+EF+RIA Service动态切换数据库的问题 通常,Ado.net EntityFramework的数据库连接字符串Connect ...

随机推荐

  1. C# *= 运算顺序

    a *= a + b *c; 不管等号右边有没有括号,总是先算右边: 即等价于 a = a *(a + b*c); using System; using System.Collections.Gen ...

  2. Access应用笔记<四>-一个完整的自动化报表搭建过程

    距离之前的三篇日志已经很久啦,今天终于完成了一个比较完整的自动化报表搭建过程 基于公司数据保密原则,样板就不放到网上来了,简单说一下背景: 这次access实现的功能包括: 1)为部门整体搭建了一个员 ...

  3. java 环境变量java_home配置多加了 \ 导致zookeeper莫名其妙问题。

    平时开发其实不太用得到java_home.path.classpath之类的环境变量,但是在命令行下运行java则需要用上,所以配错就可能出现莫名其妙错误. 错误JAVA_HOME 配置:D:\Pro ...

  4. 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }

    平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...

  5. Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块

    想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块. 附:CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25 ...

  6. 在react native用到的javascript 的一些关键知识(整理中)

    发现了一个讲解javascript的好网站,分享一下,讲的非常棒! 注意,这些文章都可以选择中文进行阅读! 下面这个连接是关于prototype的: https://developer.mozilla ...

  7. 关于kali2.0 rolling无法连接数据的解决办法

    在使用kali2.0时,经常遇到metasploit无法连接数据库的问题,经过在网上寻找资料,很多都是对kali2.0的,有些路径都是不同的了,所以未能解决, 最后在自己的摸索下,找到了如下方法: 其 ...

  8. LeetCode 219 Contains Duplicate II

    Problem: Given an array of integers and an integer k, find out whether there are two distinct indice ...

  9. IIS7.5 平台.NET无后缀名伪静态实现办法-服务器配置

    搞了好久才弄好,记下来防止忘记: 1)首先新建一个应用程序池,名称任意,比如:nettest,托管管道模式先暂时设置为集成模式,等下面的一系列设置完成之后再设置成经典模式:2)部署好站点,并将此站点的 ...

  10. c/c++连接mysql数据库

    环境:win7 x64.vs2008.mysql 对于已经安装mysql的,查看mysql安装目录,如果安装目录下没有include和lib目录, 说明没有完全安装,需要下载mysql-connect ...