• EF


    比如, 现在我们需要两张表, "学生表" 和 "班级表" , 一对多关系, 怎么用CodeFirst的方式创建数据库数据表

    1.创建两个实体类
     

    public class StudentInfo
    {
    //特性标签Key, 标记Id为实例的唯一标识符, 即主键
    [Key]
    public int Id { get; set; }
    [StringLength(32)] //varchar 必须指定长度, 否则默认长度为max
    [Required] //不允许为空
    public string StuName { get; set; }
    public DateTime SubTime { get; set; }
    
    //CodeFirst中体现两张表的关系
    //相当于EF模型中的导航属性 
    //一个学生 只能对应 一个班级
    public virtual ClassInfo ClassInfo { get; set; }
    }
    
    public class ClassInfo
    {
    [Key]
    public int Id { get; set; }
    [StringLength(32)]
    [Required]
    public string ClassName { get; set; }
    public DateTime CreateTime { get; set; }
    
    //CodeFirst中体现两张表的关系
    //相当于EF模型中的导航属性 
    //一个班级 可以对应 多个学生
    public virtual ICollection<StudentInfo> StudentInfo { get; set; }
    }

    2.创建和数据库交互的EF上下文类, 继承自DbContext

    public class CodeFirstDbContext : DbContext
    {
    //1.需要一个构造方法, 调用父类的构造方法, 传入 数据库连接字符串 的名字作为参数
    public CodeFirstDbContext() : base("name=connStr") //需配置数据库连接字符串
    {
    
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    //2.去掉 将表名设置为实体类型名称的复数版本 的约定(如 对应ClassInfo 在数据库生成 ClassInfos表)
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
    //3.
    public DbSet<StudentInfo> StudentInfo { get; set; }
    public DbSet<ClassInfo> ClassInfo { get; set; }
    }

    3.配置数据库连接字符串, 名称与 EF上下文操作类 的构造方法中传入的参数保持一致

    <connectionStrings>
    <add name="connStr" connectionString="server=.;uid=sa;pwd=123456;database=CodeFirstModel" providerName="System.Data.SqlClient" />
    </connectionStrings>

    4.执行代码, 生成数据库, 并添加一条数据

    class Program
    {
    static void Main(string[] args)
    {
    CodeFirstDbContext db = new CodeFirstDbContext();
    db.Database.CreateIfNotExists(); //如果数据库不存在就自动创建
    
    ClassInfo classInfo = new ClassInfo();
    classInfo.ClassName = "0302班";
    classInfo.CreateTime = DateTime.Now;
    db.ClassInfo.Add(classInfo);
    db.SaveChanges();
    }
    }

    5.打开sqlserver数据库,查看结果


    ————————————————
    版权声明:本文为CSDN博主「sosososolong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/sosososolong/article/details/87896733

  • 相关阅读:
    TRECT的使用
    杂记
    Delphi中停靠技术的实现
    高级停靠(Dock)技术的实现
    高级停靠(Dock)技术的实现
    vue组件内的元素转移到指定位置
    mintui loadmore组件使用+代码优化
    vue项目进行nuxt改造
    blob与arraybuffer
    vue项目首屏加载过久处理笔记
  • 原文地址:https://www.cnblogs.com/cxxtreasure/p/13089416.html
Copyright © 2020-2023  润新知