在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑.在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等.这一篇将为大家细细分析一下,如何设置这些映射. 1. 实体之间的关系 从数据表来考虑,两个表之前的关系有一对一,一对多(多对一)和多对多的关系. 其中一对一,指的是表A有一条记录对应着表B最多有一条记录与之对应.反过来也一样,表A也最多有一条记录与表B的某一条记录对应.具体在数据表上表现为,A表和B表各有一个外键指向对方. 一对多和…
0.前言 到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置. 这一篇,我带大家分享一下,我在工作中需要的EF Core的用法. 1. 初始化 在实际开发中,一般都是先设计好数据表再进行开发,所以很少用到EF Core的数据迁移功能.所以EF Core的初始化,一般也指的是EF Core上下文初始化. 1.1 连接字符串 我们通过前面的文章知道,EF Core在上下文初始化的时候,都需要一个链接字符串.如果在不考虑后续变更或者上…
0. 前言 在<C# 数据操作系列 - 5. EF Core 入门>篇中,我们简单的通过两个类演示了一下EF增删改查等功能.细心的小伙伴可能看了生成的DDL SQL 语句,在里面发现了些端倪.没看的小伙伴也不急,这就贴出来. public class ModelA { public int Id { get; set; } public string Name { get; set; } public List<ModelB> ModelBs { get; } = new List…
0.前言 <EF Core>实际上已经可以告一段落了,但是感觉还有一点点意犹未尽.所以决定分享一下,个人在实际开发中使用EF Core的一些经验和使用的扩展包. 1. EF Core的异步操作 正如这小节题目所言,EF Core是支持异步操作的,但实际可用集中在SaveChanges和异步查询这两个方法上. 具体方法声明如下: public virtual System.Threading.Tasks.Task<int> SaveChangesAsync (System.Threa…
0.前言 上一章简单介绍了一下ORM框架,并手写了一个类似ORM的工具类.这一章将介绍一个在C#世界里大名鼎鼎的ORM框架--Entity Framework的Core版. Entity Framework 非Core版目前已经更新到了6代,这是一款经过检验的ORM框架.在这里简单介绍一下Entity Framework(简称EF,额,别拿这个当关键字搜索,要不然你会被忽悠到一个英语培训机构的)的优点. C#的设计理念是约定优于配置,意思就是通过一定程度的规范性格式化的写法来避免使用配置文件或者…
文章索引和简介 通过上一篇的学习 我们把demo的各种关系终于搭建里起来 以及处理好了如何映射到数据库等问题 但是 只是搭建好了关系 问题还远没有解决 这篇就来写如何查找导航属性 和查找导航属性的几种方式 已经跟踪生成的SQL来检测是否满意 通过这节学习 来明白什么时候用哪个~~ 一.三种加载 1.延迟加载 这是原文中的图 大家可以去看下  我模仿上面的做了个测试  出现了  已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭. 我的解决办法是    var dep…
“导航属性”是实体框架用得算是比较频繁的概念. 首先,它是类型成员,其次,他是属性,这不是 F 话,而是明确它的本质.那么,什么场景下会用到导航属性呢?重点就落在“导航”一词上了,当实体 A 需要引用实体 B 时,实体 A 中需要公开一个属性,通过这个属性,能找到关联的实体 B. 又或者,X 实体表示你的博客,P 实体表示你发的一篇博文.你的博客肯定会发很多博文的,所以,X 实体中可能需要一个 List<P> 类型的属性,这个属性包含了你的博客所发表的文章.通过一个实体的属性成员,可以定位到与…
0. 前言 上一篇<C# 数据操作系列 - 11 NHibernate 配置和结构介绍> 介绍了Nhibernate里的配置内容.这一篇将带领大家了解一下如何使用NHIbernate.之前提到NHibernate继承了Hibernate的一些传统:使用XML文件进行配置,这一点也是备受争议.不过,有社区爱好者开发了一个名为<Fluent NHibernate>的项目,用来支持NHibernate的流式配置.当然,NHibernate本身也提供了NHibernate.Mapping.…
0. 前言 前几天FreeSql的作者向我推荐了FreeSql框架,想让我帮忙写个文章介绍一下.嗯,想不到我也能带个货了.哈哈,开个玩笑-看了下觉得设计的挺有意思的,所以就谢了这篇文章. 简单介绍一下,FreeSql 是NCC组织的沙盒级项目,是一款功能强大的 ORM 组件,支持 .NET Core..NET Framework 和 Xamarin.目前 FreeSql 支持以下数据库:MySQL.PostgreSQL.SqlServer.Oracle.Sqlite.Odbc.微软 Access…
0. 前言 继上一篇,以及上上篇,我们对SqlSugar有了一个大概的认识,但是这并不完美,因为那些都是理论知识,无法描述我们工程开发中实际情况.而这一篇,将带领小伙伴们一起试着写一个能在工程中使用的模板类. 1. 创建一个Client SqlSugar在操作的时候需要一个Client,用来管理数据库连接,并操作数据库.所以我们写一个DbContext用来创建Client: public class DefaultContext { public SqlSugarClient Client {…
0. 前言 前一篇我们详细的介绍了SqlSugar的增删改查,那些已经满足我们在日常工程开发中的使用了.但是还有一点点在开发中并不常用,但是却非常有用的方法.接下来让我们一起来看看还有哪些有意思的内容. 1. 不同寻常的查询 之前介绍了针对单个表的查询,同样也是相对简单的查询模式.虽然开发完全够用,但是难免会遇到一些特殊的情况.而下面这些方法就是为了解决这些意料之外. 1.1 多表查询 SqlSugar提供了一种特殊的多表查询方案,使用IQueryable接口 .来看看是怎样操作的吧: ISug…
[ASP.NET Core]EF Core - “影子属性”   有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. 老周觉得,视频直播可能会好一些,虽然我的水平一般,不过直播时,老周可以现场演示,可能会比看博客效果要好(因为现场演示,有时候会有失误,没办法,水平有限).还有一个,就是.NET 的资料其实很多,毕竟也发展了十几年了,有些东西如果别人都写过了,那我也不好意思重复了..NET Core 尽管是跨平台版本…
0. 前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用.这一篇,我继续探索NHibernate背后的秘密.嗯,就是这样. 1. NHibernate结构 先给小伙伴们放个图: 这是NHibernate的整体结构图.NHibernate通过ADO.NET 建立访问数据库的连接,然后封装了一个Transaction(事务)工厂和一个Session工厂.每次操作的时候,通过两个工厂获取对应的Session/Transaction示例操作数据…
0. 前言 在上一个系列中,我们初步浏览了一下C#的基础知识.这句话的意思就是C#基础知识系列完结了,撒花.当然,并不是因为C#已经讲完了.正是因为我们轻轻地叩开了那扇门,才能看到门后面那瑰丽的世界.那么,门后面有什么?就让我在后续的篇幅里,带着大家一起浏览吧. 0.1 C# 能做什么 之前在开发工具篇大概为大家介绍了.net 分的方向,.net framework,.net core,mono,UWP 这四个.严格讲这不是技术区分的方向,而是基于SDK的区分. 说起能完成的功能,接下来给大家看…
0. 前言 在上一篇基本讲完了EF Core的入门级教程.从这一篇开始,我们试着去探索一下 .net core平台上更多的ORM框架.那么,这一篇开始我们就来试试NHibernate. 1. NHibernate 介绍 NHibernate是Hibernate的C#版,众所周知Hibernate是Java 里ORM的顶梁柱(至少曾经).Hibernate可以说开拓了Java的世界,当年SSH三驾马车风靡世界,至今Hibernate都发挥着举足轻重的作用. 不过,与EntityFramework不…
0.前言 在上一篇中,我们知道了如何使用SqlSugar,但是也只是简单的了解了如何使用,仿佛是套着镣铐行走,这明显不符合一个合格的程序员应有的素养.所以,这一篇我们将对其进行深挖,探究其背后的秘密. 1. 花式映射 在实际开发中,程序中的实体类和数据库的表名并不能完全一致,造成的原因有很多,例如说团队对数据库的命名和对程序的命名有着不同的要求,数据库是先建立的而程序是后开发的,又或者是程序只使用了数据库中一部分表等等. 这时候就会与C#约定优于配置相违背,但是这也符合C#的设计哲学,因为配置也…
0. 前言 之前四篇介绍了一个国内开发者开发的优秀框架SqlSugar,给我们眼前一亮的感觉.这一篇,我们将试试另一个出镜率比较高的ORM框架-Dapper. Dapper是一个轻量级的ORM框架,其以高速.简单易用为特点.在某些时候,效率甚至可以与ADO.NET 媲美.那么,吹得天花乱坠,就让我们实际看看它的表现吧. 1. 开始使用 照例,先创建一个项目:DapperDemo dotnet new console --name DapperDemo 然后切换到目录里: cd DapperDem…
0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展.是的,没错.在实际开发中我们经常用Dapper作为对EF Core的补充.当然了Dapper并不仅仅只有这些,就让我们通过这一篇文章去让Dapper更像一个ORM吧. 1. Dapper Contrib Dapper Contrib 扩展了Dapper对于实体类的CRUD方法: 安装方法: 命令行: dotnet add package Dapper.Contri…
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二.准备数据: CREATE DATABASE [Blogging]; GO USE [Blogging]; GO CREATE TABLE [Blog] ( [BlogId] int NOT NULL IDENTITY, [Url] nvarchar(max) NOT NULL, CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId]) ); GO CREATE TAB…
0. 前言 前言,暂时挥别NHibernate(虽然我突然发现这玩意还挺有意思的,不过看得人不多).大步进入了有很多小伙伴向我安利的SQLSugar,嗯,我一直叫SugarSQL,好像是这个吧? 这是一个由国内开发者开发的ORM框架,是一个轻量级框架(最新版的sqlSugarCore大概只有290kb).下图是sqlSugar的功能描述: 从图中我们能够大概看出,SqlSugar的使用需要预先创建一个SqlSugarClient对象.SqlSugar在此基础上添加了CRUD.实体信息维护(映射关…
Loading Related Data https://docs.microsoft.com/en-us/ef/core/querying/related-data Eager loading means that the related data is loaded from the database as part of the initial query. Explicit loading means that the related data is explicitly loaded…
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project -->  ASP.Net Core Web Application(.Net Core) -- > Empty --> OK 添加EF Core引用: 编辑project.json文件,在[dependencies]和[tools]两个节点内添加下面代码 dependencies节点: "Micr…
0.前言 前篇介绍了一些数据库的基本概念和以及一些常见的数据库,让我们对数据库有了一个初步的认识.这一篇我们将继续为C#数据操作的基础填上一个空白-SQL语句. SQL(Structured Query Language,结构化查询语言)是一种特定的编程语言,用于管理数据库系统,操作数据甚至编写一些程序. 当然,一方面因为时间问题,一方面因为各大数据库的区别(当然了,还有就是个人对SQL研究并不是那么深)所以这一篇就从SQL的基本操作入手,带领大家一起看看SQL的世界. 1. SQL的分类 在S…
回到目录 对EF开发来说,导航属性肯定都用过,事实上,它是由VS IDE工具根据你的数据库关系结构自动生成的外键属性,在类视图中可以看到相关属性,它是以外键表名来标识的,如果是一对多的关系,那么,它会为属性加上ICollection泛型集合用来标识,而今天我们要说的当然不是自动生成的,而是手动加的属性,这样属性需要我们手动进行join,然后把它按需赋值,而使用include当然是无效的,呵呵. 一般地,我们习惯上把集合属性定义为List<T>,但是,对于linq to entities来说,这…
Caution:注意 This documentation is for EF Core. For EF6.x and earlier release see http://msdn.com/data/ef. 该文本用于EF Core.EF6.x和更早的版本请参看:http:msdn.com/data/ef. Shadow Properties¶ Shadow properties are properties that do not exist in your entity class. Th…
>导航属性: 01.个人理解就是Ef中的属性在实体数据表中不存在(先这么认为); 02.就是除了根据表中列映射出的属性 之外根据表与表之间的关系的关联属性.方便操作与之关联的表; 例如: 有 表A 表B 的关系是1对多,根据A,B表创建A类和B类 那么在A类中除了根据表中列映射出的属性,还要根据表之间的关联关系创建一个B类型的ICollection<>集合属性,就叫做导航属性 而B类除了根据B表中的列创建的属性,还要创建一个A类型的导航属性, 说白了就是根据主键表创建的类 必须创建一个根…
有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. 老周觉得,视频直播可能会好一些,虽然我的水平一般,不过直播时,老周可以现场演示,可能会比看博客效果要好(因为现场演示,有时候会有失误,没办法,水平有限).还有一个,就是.NET 的资料其实很多,毕竟也发展了十几年了,有些东西如果别人都写过了,那我也不好意思重复了..NET Core 尽管是跨平台版本,但核心依然是.net 基础,我们不需要全新去学习,只要掌握一些新…
前言 今天下午在开发的时候发现EF Core实体模型中的导航属性为 null,经排查既不是没有加 virtual 关键字,也不是外键关系映射错误. 解决方法 通过查询官网文档,发现,原因在于EF Core目前不支持延迟加载,所以每次查询,都会得到 null 的导航属性.目前只有使用 预先加载 或 显示加载 才能得到正确的导航属性. 最后我使用显示加载成功得到导航属性的数据,具体使用方法可进官网文档查看.…
在EF中,外键被称为导航属性. 在EF core中,查询的时候默认是只查自身而不会去查询外键表的.如果想要让查询结果包含外键实体,则需要使用include方法来让查询结果包含外键实体.如 db.StudentDetails.Include(o=>o.Student).Where(s => s.u_SID == 1).FirstOrDefault().Student.Name; 生成sql语句时,使用Include在sql中内连接inner jion来查询,也就可以查询到外键表Student.…
主从表是配了级联删除的,如果通过导航属性去除从表明细删除时将报错The relationship could not be changed because one or more of the foreign-key properties is non-nullable 通过实体导航属性取出来的从表集合,EF无法判断你是否要对其进行别的操作,不会级联删除,必须手动删除从表记录…