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; }

}
}

时间: 2024-08-05 02:40:05

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

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

我看到很多nopCommerce论坛的用户问他们如何使用Entity Framework(EF)代码优先迁移来自定义nopCommerce,添加新的字段和entites核心.我实际上在做nopCommerce定制项目时使用了很多EF Migrations,我必须说它在开发中有很大帮助. 今天,我将与大家分享如何在nopCommerce项目中做到这一点!我将使用nopCommerce 3.20作为例子,但你可以很容易地应用这个概念到其他的vesions! 原文链接:http://www.nopcn

EF CodeFirst 如何通过配置自动创建数据库&lt;当模型改变时&gt;

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧惭愧. 如有不明白,请参考:EF CodeFirst 创建数据库 及 EF CodeFirst增删改查之'CRUD' 话不多说,直接上代码: using System; using System.Collections.Generic; using System.Linq; using System

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

在以往的开发过程当中,我会经常选择EF框架作为底层数据结构,EF为我们提供了很好的ado.net数据访问机制,他覆盖了数据链接,linq等多方面内容,而且当我们使用数据库优先或者code first的时候都体现出明显的优势. 一键生成实体,免除手写model的烦恼. 实时更新数据结构,使数据库与model保持高度一致. 提供多种底层数据的访问方法. 优雅的语法,对于我这种喜爱偷懒的程序猿是一大福音. 然而entity framework在vs中生成的.edmx文件,会导致摘要(说明)为空的bug

EF的代码优先设计

CodeFirst 用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库 接下来用学生这个例子来演示,有学生表,课程表,和成绩表三张表 首先是Model层 学生表 using System; using System.Collections.Generic; using System.Linq; using System.Web; /**/ using System.ComponentModel.DataAnnotations;//验证 n

Entity Framework 代码优先 实现数据库

二,引用dll: 1.采用Nuget安装EF6.0.2: 2.采用Nuget安装MySql.Data.Entity.EF6 注意:要采用Nuget进行安装,否则可能会缺少相应的dll或者是配置信息 二.配置 web.config或app.config 1.将entitframework节点替代为: <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity

(转)EF中数据优先,模型优先和代码优先

看了很多文章也不是很明白,说的都太书面化了,大家看看这图一下子就明白了,哈哈 其实看图很简单,database first和model first都是通过 data model创建的edmx文件,只不过model first模块可以自己根据需要创建和修改实体,显得更加灵活. codefist是一个class代码文件,它可以由一些第三方的软件可视化的创建,也是非常灵活的一种方式,目前被使用也是最广泛的. 二.Entity Framework Database first(数据库优先)使用过程 2.

EF之Code First代码优先

1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设计器,而是空的Code first 模型.如果说你的项目引用中没有entity framkwork,则需要去nuget程序包中安装ef框架(entity) 创建一个类,这个类就是数据的上下文,它的目录在MVC项目中的Model文件夹,base中的是你所创建的数据库名称,而你创建的表也是在model的

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

         文章简略:本文测试项目为Silverlight+EF+RIA Service动态切换数据库的问题 通常,Ado.net EntityFramework的数据库连接字符串ConnectionString是存在实体框架所在的类库项目中的配置文件中(.config)的,类似这样: <connectionStrings> <add name="{EFName}Entities" connectionString="metadata=res://*/

(17)ASP.NET Core EF基于数据模型创建数据库

1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序.使用迁移(Migrations)基于数据模型创建数据库,你可以在Windows上使用Visual Studio 2017 PowerShell或在Windows.macOS或Linux上使用.NET Core CLI来学习创建数据库. 2.创建新项目 2.1系统必备 在创建新项目之前都要检查是否安装以下软件:●具有以下工作负载的Visual Studio 2017 15.7版或