使用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层就完成了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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,如下图这是刚创建的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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中的类名
几张表几个字段
1 2 | 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创建双表了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探