zoukankan      html  css  js  c++  java
  • 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; }


    }
    }

  • 相关阅读:
    性能优化与使用Block实现数据回传(3)
    封装思想和抽取(2)
    磁盘缓存的计算与清理(1)
    滑动返回的延伸(全局滑动返回功能)
    滑动返回功能被覆盖的解决思路
    OC之类与对象
    OC之OC与C的比较
    OC之知识储备篇
    C语言之总结3
    C语言总结2
  • 原文地址:https://www.cnblogs.com/grj001/p/12223623.html
Copyright © 2011-2022 走看看