使用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创建双表了

posted @ 2022-09-12 17:32  _Fearless  阅读(318)  评论(0编辑  收藏  举报