C# CodeFirst(EF框架)代码优先创建数据库
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; }
}
}