使用ef搭三层架构创建数据库(双表)
主要想写几个难点问题啊,这个要求还是比较多的
首先搭建三层架构进行层级之间的引用
先从model开始写起
这边创建两个类,准备后续创建数据库表的工作
创建两张表中值得注意的一点就是using System.ComponentModel.DataAnnotations;这个引用,很重要,可以用[Key]进行引用补充(c#福利啊,因为这事儿被成某一顿叭叭)[Table("TbEmp")]这一段话也要进行引用,是using System.ComponentModel.DataAnnotations.Schema;可以直接从key获取到的引用复制后.就可以出来双表之中有主键和外键,主键上方加[Key]就可以了如下图
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Model { [Table("TbJobType")]//创建表名 public class TbJobType { [Key] public int Id { get; set; }//职位主键 public string JobTypeName { get; set; }//类型名称 } }
但外键不一样,非常过分啊,它不仅仅要用[ForeignKey],在内部还要包起来ForeignKey的谁,
包起来也就算了吧,它放的位置还有要求,必须在原本你定义的字段下面,在上面他告诉你没有会报错,
放下面就放下面吧,要求多点也无所谓,更过分的是下面还要跟另外一个表的主键相连,要用到virtual(虚方法)
去找到相连的那张表,代码豆大一点,要求倒是不少。这样写完后我们的model层就完成了
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Model { [Table("TbEmp")] public class TbEmp//创建表名 { [Key] public int Id { get; set; }//人员主键 public string EmpCode { get; set; }//员工编号 public string EmpName { get; set; }//员工姓名 public string Sex { get; set; }//性别 public int JobTypeId { get; set; }//职位外键 public float Salary { get; set; }//薪资 //导航属性 [ForeignKey("JobTypeId")]//获取外键 public virtual TbJobType TbJobType { get; set; } } }
接下来就是dal层了,在dal中要求少了许多,首先我们要创建一个新项实例化数据库上下文,名叫ADO.NET实体数据模型默认名称为Model1
我这里起的名字为MyDBcontext,如下图这是刚创建的效果
using Model; using System; using System.Data.Entity; using System.Linq; using System.Xml; namespace DAL { public class MyDbcontext : DbContext { //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config) //使用“MyDbcontext”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的 //“DAL.MyDbcontext”数据库。 // //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“MyDbcontext” //连接字符串。 public MyDbcontext() : base("name=MyDbcontext") { } //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First 模型 //的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。 // public virtual DbSet<MyEntity> MyEntities { get; set; } } //public class MyEntity //{ // public int Id { get; set; } // public string Name { get; set; } //} }
我们将那行注释的字段复制出来,粘在MyDbcontext 的类中,简单点就是粘在下一行,将dbset中的MyEntity改为我们model中的类名
几张表几个字段
public virtual DbSet<TbJobType> TbJobType { get; set; } public virtual DbSet<TbEmp> TbEmp { get; set; }
在dal中要初始化数据库并实例化上下文
实例化后我们点开dal中的app.config会出现三大块内容,我们找到第三块内容将属性connectionString内容删除掉,换为使用数据库的代码
在工具中的链接数据库中获取到的代码,最后将里面数据库名称换为自己想创建的数据库名称
如果没有database的情况下就是有两个为ef的dll没有进行引用,创建完成后我们就可以传入bll中
再传入ui层中,把方法写入home控制器中(默认控制器)Index方法确保第一次运行时就可以执行创建数据库
当写到ui层时要将dal层中app.config的内容复制到web.config中,引用两个ef,最后就可以完成完整的ef创建双表了