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


    }
    }

  • 相关阅读:
    jQuery dataType指定为json的问题
    C# Post数据和接收简单示例【转】
    搜集的关于领域驱动设计(DDD)的理论知识
    WCF:(400) Bad Request
    关于SQL生成随机字符串
    如何通过禁用按钮避免jQuery.ajax重复请求
    注册自定义HTTP Handlers
    Node.js+Express on IIS
    iframe在IE下不能写cookie的解决
    node.js从全局目录里加载module
  • 原文地址:https://www.cnblogs.com/zzjbk/p/4768077.html
Copyright © 2020-2023  润新知