当前位置:首页 > Web开发 > 正文

通过映射自动产生SQL语句

2024-03-31 Web开发

https://www.cnblogs.com/miro/p/4053473.html

学完本篇文章,你将会掌握基于EF数据模型的完整开发流程。

本次将会完成EF数据模型的搭建和使用。

基于这个模型,将之前的示例添加数据库盘问验证成果。

文章提纲

概述 & 要点

详细法式

总结

概述 & 要点

下面是本文要点,正文部分会有详细介绍。

EF架构图

新建基于EF的Data Model的约定

关于ORM的重要观点,和传统方法开发的区别

EF开发的整体过程

详细法式

新建文件夹,规划好代码摆放位置

创建相关类 (Data Model)

创建 Database Context

创建Initializer, 使用EF初始化数据库,插入示例数据

完成数据库盘问验证

新建文件夹,规划好代码摆放位置

根目录下新建一个 ViewModels文件夹。

           Models文件夹里面存放对应于数据库表的实体。

           View中需要显示的数据和Models中实体模型不必然能对应上, 因此需要专门给View使用的自界说数据模型,我们称之为ViewModel , 放在ViewModels文件夹里面。

根目录下新建一个DAL 文件夹。

           DAL 安排数据访谒相关类。

            NOTE 本文中放AccountContext.cs, AccountInitializer.cs

技术图片

创建相关类(Data Model)

为了越发贴近真实情况,我们针对用户成立三个相关的类。

SysUser, SysRole, SysUserRole

这是用户权限打点RBAC (Role – Based Access Control)的一个范例模型, 更庞大的模型都可以在这个根本长进行扩展。

OK,下面我们就开始新建这个模型。

我们先去网上找个大抵的关系图做参考,打开百度,输入 user role , 搜索图片。

挑一个类似的做参考。

技术图片

NOTE 权限相关是系统打点领域的,不涉及具体业务,我起名字的时候都加了Sys前缀,这样和业务区离隔来。

参考上面这个图成立 Data Model

SysUser Entity

技术图片

SysRole Entity

技术图片

SysUserRole Entity

技术图片

对付上面几个类的约定和说明:

EF生成数据库时,ID 属性将会成为主键。(约定:EF默认会将ID或classnameID生成主键, MSDN建议连结气势派头的一致性, 都用ID或classnameID, 我们这里都用ID)

EF 生成数据库时 , <navigation property name><primary key property name>这种形式的会成为外键. ( 约定 )

例如外键 SysUserID = SysUser(navigation property)+ID(SysUser的主键)

界说为virtual的几个属性是 navigation 属性(virtual非必需, 只是惯例用法, 后面文章将会讲解用virtual的好处).

navigation 属性生存着其他的关联entity(entities)

示例中, SysUser和SysUserRole是一对多的关系, SysRole和SysUserRole也是一对多的关系.

如果是 "多", 属性类型就必需是list( 这里用的是Icollection )

创建 Database Context

前置条件:安置EF

打开 工具à库措施承打点器à措施承打点器控制台

输入 install-package entityframework

技术图片

技术图片

去MSDN上检察下EF的架构图:

技术图片

从上图可以看出,EF框架在底层是通过挪用ADO.NET来实现数据库操纵的。

多转一道弯性能和灵活性必定会受到影响,所以本系列文章结束后同样也会给出MVC+ADO.NET的方案,大家可以按照需要选择。

NOTE

微软官方推出的ORM框架主要有Linq to SQL和Entity Framework.

EF是目前最新的,也是保举共同MVC使用的框架。

实际操纵前再增补一些重要观点:

如果不用ORM框架,我们一般这样来使用ADO.NET进行数据库开发:

将ADO.NET对数据库的操纵封装到一个类里SqlHelper中

在DAL层挪用SqlHelper

其他层再挪用DAL进行数据库操纵

使用ORM之后,以前面的SysUser为例:

O(Object) à 措施中的类 SysUser, 就是东西

R (Relation)à 数据库中的表

M(Mapping)à O和R的映射关系

ORM对传统方法的改造:

充当桥梁,实现了关系数据和东西数据的映射,通过映射自动孕育产生SQL语句。

对常用的操纵,节省了写SQL语句的法式。

好了,此刻须要的观点应该理解了吧,下面我们就进行实际的操纵了。

创建类 AccountContext.cs , 让他担任自System.Data.Entity.DbContext, 我们用这个类完成EF的成果。

技术图片

主要做下面三件事:

为每个entity set创建一个DbSet

在EF中,凡是情况下一个entity set对应数据库中的一张表,一个entity对应表中的一行。

指定一个连接字符串

结构函数中的 base("AccountContext") 。

默认情况下和类名一样,即AccountContext,我们显式的给他指定出来。

指定单数形式的表名

>();

默认情况下会生成复数形式的表,如SysUsers

NOTE 表名用单复数形式看各自的习惯,没有明确的规定。有的公司表名全用单数,有的公司按照表的意思,有单数也有复数。

技术图片

共同上面第2点,先把web.config中连接字符串给指定了。

如下图,贴着appSettings配置节上面添加。注意要web.config中要加上红字部分,不然会堕落。

<connectionStrings>

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30626.html