软件: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
public 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);
好了,后续再更新