• .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);

    好了,后续再更新

  • 相关阅读:
    【HMS core】【IAP Kit】【FAQ】华为支付典型问题集
    R语言 某高校的期末综合测评
    java烧脑总结:技术的本质?到底什么是数组?数组为何查询快插入慢?
    电脑桌面任务提醒便签选择哪一个好用?
    性能优化 可见性剔除学习 空间分割术,包围盒检测,遮挡检测
    基于javaweb的农业信息管理系统(java+ssm+jsp+js+html+mysql)
    OAuth2:单点登陆客户端
    Java代码读取properties配置文件
    【大虾送书第十期】从不了解用户画像,到用画像数据赋能业务看这一本书就够了
    实现一个简单的 ctrl+ f 搜索
  • 原文地址:https://blog.csdn.net/kingdom_hua/article/details/128213164