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


浙公网安备 33010602011771号