.NET EF配置数据库链接、表的一对多操作(1)

软件:VS2015+.NETFramework4.8

使用配置文件:app.config

新建项目:控制台项目

使用规则:DBFirst

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

一、配置数据库链接

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

<appSettings>
    <add key="sqlserver" value="server=.;database=mydbfirst;integrated security = true;"/>
</appSettings>

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<Class>
    {
        public ClassConfig()
        {
            this.ToTable("T_Classes");    //指定对应的数据库中的表为T_Classes
        }
    }

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

 5、创建数据库操作DBContext

public class MyDBContext:DbContext
    {  
        public MyDBContext() : base(ConfigurationManager.AppSettings["conn"].ToString())
        {
        }
        public DbSet<Class> Classes { get; set; }        //这个是操作Class实体表的DbSet
        public DbSet<Student> 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);

好了,后续再更新

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值