• .NET EF配置数据库链接


    软件:VS2015+.NETFramework4.8

    使用配置文件:app.config

    新建项目:控制台项目

    使用规则:DBFirst

    首先说明下,目前VS2019及以上版本不使用app.config了,我们可以使用对外部的josn文件读取,进行序列化及反序列化,并使用MD5加密做对比,相对安全

    一、配置数据库链接

    1、在app.config中配置数据库链接,这里使用的是sqlerver数据库,使用windows身份验证,免除账户及密码


       

    2、项目引用using System.Configuration,using前,需要添加引用

    3、使用控制台,安装EF

    Install-Package EntityFramework -Version 6.4.4

    4、新建自己的Context类,实现DbContext接口,使用ConfigurationManager.AppSettings获取app.config文件中的数据库连接串,让函数自己构造并创建数据库连接

    public class MyDBContext:DbContext
        {  
            public MyDBContext() : base(ConfigurationManager.AppSettings["sqlserver"].ToString())
            {
            }
        }

    二、创建数据库的实体类、配置类

    1、先看下项目结构:

    2、创建对应表的实体类

    public class Class    //班级实体类  =》用来对应数据库的T_Class表
        {
            public long Id { get; set; }    //主键,这个表是主表,用Class.Id与Student的ClassId外键进行关联
            public string Name { get; set; }
        }

         public class Student  //学生实体类  =》用来对应数据库的T_Student表
        {
            public long Id { get; set; }
            public string Name { get; set; }
            public long ClassId { get; set; }    //外键

            //导航属性,如果不修饰成virtul,在调用时则需要使用include
            public virtual Class Class { get; set; } 
            public int Age { get; set; }
        }

    3、创建数据库实体表

    首先,T_Classes表主键为id,主键的名字必须是id,这样就不用在EntityConfig中指定其他名字的主键了,因为EF规定默认识别id为主键,而且还要id设置为自增,加一

     接下来,配置T_Studens

     

     对于id一样设置为主键,自增,加一。而且T_Studens的ClassId的数据类型要和T_Classes的id的数据类型要保持一致

    最后添加两个表的关系,因为一个班级对应多个学生,一个学生必须有一个班级,所以我们在多的那端设置关系,我们选择ClassId,右键,点关系,点添加

    这样数据库就配置好了,配置好了以后有什么用呢,慢慢往下看

     4、创建实体类配置类

        class ClassConfig:EntityTypeConfiguration
        {
            public ClassConfig()
            {
                this.ToTable("T_Classes");    //指定对应的数据库中的表为T_Classes
            }
        }

        class StudentConfig : EntityTypeConfiguration
        {
            public StudentConfig()
            {
                this.ToTable("T_Studens");    //指定对应的数据库中的表为T_Classes
            }
        }

     5、创建数据库操作DBContext

    public class MyDBContext:DbContext
        {  
            public MyDBContext() : base(ConfigurationManager.AppSettings["conn"].ToString())
            {
            }
            public DbSet Classes { get; set; }        //这个是操作Class实体表的DbSet
            public DbSet Students { get; set; }//这个是操作Student实体表的DbSet
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());//这个是获取ClassConfig和StudentConfig的配置信息的,程序集+反射
            }
        }

     三、先来个插入条数据

    在主程序中写:

    class Program
        {
            static void Main(string[] args)
            {
                using (MyDBContext db= new MyDBContext()) {
                    Class c = new Class() { Name = "实验6班"};                
                    db.Classes.Add(c);
                    Student s = new Student() { Age = 15, Class = c, Name = "小柯" };
                    db.Students.Add(s);
                    db.SaveChanges();
                }
            }
        }

    运行后:

     然后咱们说,有没有什么感觉,就是这个ClassId没有赋值,是EF自动把T_Classes中的Id数据一起带入到T_Studens的ClassId

    你可能会说这个有啥子用,OK,接下来我们运行下面的代码,看下结果:

    Student s = db.Students.Where(e=>e.Name=="小柯").FirstOrDefault();
    Console.WriteLine(s.Name);
    Console.WriteLine(s.Class.Name);

    你会发现你操作的是Student表,但是也把Classes表的Class.Name内容带过来了不是,就是说 你查小柯时,直接顺带着把小柯的班级带过来了,这个就是关联的结果

    如果想在控制台看执行的sql语句日志,可以在程序中加入这句:

    db.Database.Log = log =>Console.WriteLine(log);

    好了,后续再更新

  • 相关阅读:
    MySQL-如何分库分表?一看就懂
    业主方怎么管理固定资产
    如何用JavaScript完美地区分双击和单击事件
    【k8s】数据存储
    Docker容器设置自动启动的方法
    Qt/QML学习-PathView
    从下载镜像到装系统(MSDN 和软碟通)
    谷歌、AMD、英特尔加入挑战,英伟达AI解决方案还能继续“遥遥领先”吗?
    2023年全球市场新能源汽车车载充电器总体规模、主要生产商、主要地区、产品和应用细分研究报告
    【算法 | 位运算No.2】leetcode 371. 两整数之和
  • 原文地址:https://blog.csdn.net/kingdom_hua/article/details/128213164