ASP.NET Core学习日记9

1.影子属性
解析:模型类中没有定义的,但数据表中存在的属性——即模型类与数据表中没有对应关系的属性。

2.Object中Equals问题
解析:Object基类的Equals方法存在两个明显的问题。一是缺乏类型安全性,二是对于值类型而言需要装箱。

3.GetHashCode方法
解析:如果两个字符串对象相等,则GetHashCode方法返回相同的值。但是,每个唯一的字符串值并没有唯一的哈希代码值。不同的字符串可以返回相同的哈希代码。

4.DateTime.Now.Ticks
解析:
[1]DateTime.Now.Ticks是指从DateTime.MinValue之后过了多少时间,10000000为一秒,保存在long类型的变量里,可以将它传到datetime的构造函数内转成时间类型
[2]DateTime本质上就是一个long型的,通过0.1纳秒的单位,换算成各种时间,如果分,秒,年月日等等这些组合起来就是一个DateTime类型
[3]此属性的值表示自0001年1月1日午夜12:00:00以来已经过的时间的以100毫微秒为间隔的间隔数

5.非跟踪查询
解析:如果不需要更新从数据库中检索到的实体,则应使用非跟踪查询。

6.ADO.NET组成
解析:
System.Data.Common:各种数据访问类的基类和接口
System.Data.SqlClient:对Sql Server进行操作的数据访问类
[1]SqlConnection:数据库连接器
[2]SqlCommand:数据库命名对象
[3]SqlDataReader:数据读取器
[4]SqlParameter:为存储过程定义参数
[5]SqlTransaction:数据库事物

7.DbSet<>().Where()
解析:即使相应的实体已经被DbContext缓存,EF还是会去执行数据库访问,而数据库访问是被普遍认为比较耗费性能的。

8.AOP[面向切面编程]
解析:
[1]简单来说就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
[2]实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建方面,从而使得编译器可以在编译期间织入有关方面的代码。

9.FreeSql
解析:
[1]FreeSql是功能强大的对象关系映射技术[ORM],支持.NETCore2.1+或.NETFramework4.0+或Xamarin
[2]支持MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦/人大金仓/神舟通用/Access
[3]github:https://github.com/dotnetcore/FreeSql

10.EF Core加载关联数据
解析:
[1]预先加载表示从数据库中加载关联数据,作为初始查询的一部分。
[2]显式加载表示稍后从数据库中显式加载关联数据。
[3]延迟加载表示在访问导航属性时,从数据库中以透明方式加载关联数据。

11.经过筛选的包含
解析:支持的操作包括:Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending、Skip和Take。

12.EF使用场景
解析:
[1]从数据库生成Class
[2]由实体类生成数据库表结构
[3]通过数据库可视化设计器设计数据库,同时生成实体类

13.DbContext
解析:DbContext是EntityFramework很重要的部分,连接域模型与数据库的桥梁,是与数据库通信的主要类。
[1]EntitySet:DbContext包含了所有映射到表的entities
[2]Querying:将Linq-To-Entities转译为Sql并发送到数据库
[3]Change Tracking:从数据库获取entities后保留并跟踪实体数据变化
[4]Persisting Data:根据entity状态执行Insert、update、delete命令
[5]Caching:DbContext的默认第一级缓存,在上下文中的生命周期中存储entity
[6]Manage Relationship:DbContext在DbFirst模式中使用CSDL、MSL、SSDL管理对象关系,Code First中使用Fluent API管理关系
[7]Object Materialization:DbContext将物理表转成entity实例对象

14.ON DELETE SET NULL
解析:外键约束[FK_Order Details_Orders_OrderID]末尾的语句是ON DELETE SET NULL,表示当主表的数据行删除时,自动将关联表数据行的外键更新为NULL。

15.SQL Server数据库关联删除行为
解析:
[1]ON DELETE NO ACTION:默认行为,删除主表数据行时,依赖表中的数据不会执行任何操作,此时会产生错误,并回滚DELETE语句。
[2]ON DELETE CASCADE:删除主表数据行时,依赖表的中数据行也会同步删除。
[3]ON DELETE SET NULL:删除主表数据行时,将依赖表中数据行的外键更新为NULL。为了满足此约束,目标表的外键列必须可为空值。
[4]ON DELETE SET DEFAULT:删除主表数据行时,将依赖表的中数据行的外键更新为默认值。为了满足此约束,目标表的所有外键列必须具有默认值定义;如果外键可为空值,并且未显式设置默认值,则将使用NULL作为该列的隐式默认值。

16.DeleteBehavior枚举
解析:

public enum DeleteBehavior
{
    Cascade,
    SetNull,
    ClientSetNull,
    Restrict
}

说明:在OnDelete方法中,需要传递参数DeleteBehavior枚举。

17.DeleteBehavior.Cascade
[1]如果关联实体未被跟踪,主实体的状态标记为删除,执行SaveChage时,在删除主表的数据的同时,通过数据库的行为删除关联表的数据行;
[2]如果关联实体已经被跟踪,将主实体的状态标记为删除时,关联实体的状态也会标记为删除,执行SaveChange时,先删除关联表的数据行,然后再删除主表的数据行;
[3]外键可以设置非空值、也可以设置为可为空值;
[4]关联实体可以不被跟踪。

18.DeleteBehavior.SetNull
[1]如果关联实体未被跟踪,主实体的状态标记为删除,执行SaveChage时,在删除主表的数据时,通过数据库的行为将关联表数据行的外键更新为NULL,;
[2]如果关联实体已经被跟踪,将主实体的状态标记为删除时,关联实体的外键会被设置为null,同时将关联实体的状态标记为修改,执行SaveChange时,先更新关联表的数据行,然后删除主表的数据行;
[3]因为要将外键更新为NULL,所以外键必须设置为可空字段;
[4]关联实体可以不被跟踪。

19.DeleteBehavior.ClientSetNull
[1]数据库不会执行任何行为;
[2]关联实体必须被跟踪,将主实体的状态标记为删除时,关联实体的外键被设置为null,同时将关联实体的状态标记为修改,执行SaveChange时,先更新关联表的数据行,然后删除主表的数据行[此时的行为与DeleteBehavior.SetNull一致];
[3]因为要将外键更新为NULL,所以外键必须设置为可空字段;
[4]关联实体必须被跟踪,否则保存数据时会抛出异常。

20.DeleteBehavior.Restrict
[1]框架不执行任何操作,由开发人员决定关联实体的行为,可以将关联实体的状态设置为删除,也可以将关联实体的外键设置为null;
[2]因为要修改关联实体的状态或外键的值,所以关联实体必须被跟踪。

21.DbContextOptions
解析:该参数用来配置数据库连接。

22.安装内存数据库包
解析:Microsoft.EntityFrameworkCore.InMemory

23.获取租户Id的两种方法
解析:
[1]根据登录用户获取,作为登录用户的附加信息,比如把租户Id放到Json Web Token里面或者根据用户Id去数据库里取对应的租户Id
[2]根据企业或组织用户的Host获取,部署的时候会给每个企业或组织分配一个单独的Host,并在数据库里维护着一个租户Id和Host的映射表,查询的时候根据Host去取对应的租户Id

24.Single和SingleOrDefault
解析:
[1]Single:返回序列中的唯一记录,如果没有或返回多条记录,则引发异常。
[2]SingleOrDefault:返回序列中的唯一记录;如果该序列为空,则返回默认值;如果该序列包含多个元素,则引发异常。

25.导航属性
解析:通过一个实体的属性成员,可以定位到与之有关联的实体,这就是导航的用途了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NLP工程化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值