C# CodeFirst(EF框架)代码优先创建数据库
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框架)代码优先创建数据库的更多相关文章
- 在快速自定义的NopCommerce中使用实体框架(EF)代码优先迁移
我看到很多nopCommerce论坛的用户问他们如何使用Entity Framework(EF)代码优先迁移来自定义nopCommerce,添加新的字段和entites核心.我实际上在做nopComm ...
- 结合实体框架(代码优先)、工作单元测试、Web API、ASP. net等,以存储库设计模式开发示例项目。NET MVC 5和引导
介绍 这篇文章将帮助你理解在库模式.实体框架.Web API.SQL Server 2012.ASP中的工作单元测试的帮助下设计一个项目.净MVC应用程序.我们正在开发一个图书实体和作者专用的样例图书 ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
- EF的代码优先设计
CodeFirst 用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库 接下来用学生这个例子来演示,有学生表,课程表,和成绩表三张表 首先是M ...
- 使用T4模板为EF框架添加实体根据数据库自动生成字段注释的功能
转自http://jeffblog.sinaapp.com/archives/501 首先我们先下载一个文件GetSummery,这里我提供了,大家可以直接下载:下载 我们在数据库建立一个表,并给表中 ...
- C# 的EF框架怎么连接Oracle数据库
安装odp.net ODP.NET你不需要安装Oracle,不需要配置oracle.key文件,不需要配置TnsNames.Ora文件 不需要配置环境变量:完全的傻瓜式的在没有安装oracle数据库或 ...
- EF之Code First代码优先
1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设 ...
- 从实体框架核心开始:构建一个ASP。NET Core应用程序与Web API和代码优先开发
下载StudentApplication.Web.zip - 599.5 KB 下载StudentApplication.API.zip - 11.5 KB 介绍 在上一篇文章中,我们了解了实体框架的 ...
- 动态切换数据库(EF框架)
文章简略:本文测试项目为Silverlight+EF+RIA Service动态切换数据库的问题 通常,Ado.net EntityFramework的数据库连接字符串Connect ...
随机推荐
- [NHibernate]存储过程的使用(三)
目录 写在前面 文档与系列文章 查询 总结 写在前面 前面的文章介绍了在nhibernate中使用存储过程进行增删改的操作,当然查询也是可以的,在nhibernate中也可以执行任意的存储过程.本篇文 ...
- Ubuntu下su被拒绝
ubuntu@ubuntu:~$ sudo passwd root输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码前提是你肯定得知道当前用户的密码. 然后登录: ...
- JAVA设计模式--单例模式
单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例 ...
- Asp.Net Core--基于声明的授权
翻译如下: 当创建身份时,其可以被分配由可信方发布的一个或多个声明. 索赔是名称值对,表示主题是什么,而不是主体可以做什么. 例如,您可能有驾驶执照,由当地驾驶执照颁发. 您的驾驶执照上有您的出生日期 ...
- 听说你们要开始学C了
同学们好: 先自我介绍一下,我是你们的助教吴喆(厚颜无耻地要求大家叫我吉吉老师:-D),本科学的电子,所以陆陆续续接触了不少C/C++的工作,曾经被编码折磨得死去活来,如今却对其念念不舍,颇有点“斯德 ...
- day2
三级菜单: ))))))))))] last_levels.pop() ]]]]]]]]:] information = : ch = msvcrt.getch() ][][: : password= ...
- Xcode 中的相对路径与绝对路径的相关设置
近日闲来无事,与博客园中闲荡,忽至一烟霞照耀祥瑞蒸熏松竹翠秀奇花遍开的神奇之地.如此美景,令人心生向往,故而徜徉于其中不可自拔,独乐乐不如众乐乐: iOS开发之 相对路径与绝对路径 https://d ...
- 51nod1073(约瑟夫环)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1073 题意: 中文题诶~ 思路: 直接模拟的话O(n*k)的 ...
- AngularJS Bootstrap
AngularJS 的首选样式表是 Bootstrap. 可以在 AngularJS 应用中加入 Twitter Bootstrap,你可以在你的 <head>元素中添加如下代码: < ...
- iOS键盘输入屏幕上移
在iOS开法中经常会遇到键盘遮挡屏幕的事情(比如输入账号密码验证码等等),就使得原本都不大的屏幕直接占了一半甚至更多的位置,这倒无所谓,关键是挡住了下面的按钮.这样的话按钮的事件也就触发不了,最好的解 ...