EF CORE

主键的自增策略:

自动增长,Guid,Hi/Lo

Guid:可以保证在高并发情况下不重复(其实就是UUID)

自动增长:
        优点:简单

        缺点:数据库迁移,和分布式系统中很麻烦,因为他有一个锁的机制,所以 高并发写入性能非常差。自增的值默认是由数据库生成的。

OptionsBuilder.Logto  可以自己写代码 过滤一些不需要的消息

ToQueryString  :

public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)
        {
            if (source == null)
                throw Error.ArgumentNull(nameof(source));
            if (predicate == null)
                throw Error.ArgumentNull(nameof(predicate));
            return source.Provider.CreateQuery<TSource>(
                Expression.Call(
                    null,
                    CachedReflectionInfo.Where_TSource_2(typeof(TSource)),
                    source.Expression, Expression.Quote(predicate)
                    ));
        }

由源码可知: EFCore的where的方法返回的是:IQueryable  类型 

只能获取查询操作的sql语句,不会真正的去执行这个sql语句

写测试性代码:用简单的日志,正式需要记录标准的sql给负责人用 标准日志,开发阶段中,从复杂的sql 查询操作中看到sql 用ToQueryString();

用EfCore 可以将不同的 C#语句翻译成不同的数据库的语句

为什么不用用IEnumerable  而要用IQueryable方法?

因为IEnumerable调用的是客户端的,在内存中执行

IQueryable调用的是服务器上的  翻译成sql语句然后再服务器上评估

客户端上的性能不如服务器端上的性能 所以要用IQueryable

缓存:

 其中:

[ResponseCache(Duration = 20)]  是添加缓存

Duration = 20:设置的是缓存时间:20秒

  [ResponseCache(Duration = 20)]
        [HttpGet]
        public DateTime now()
        {
            return DateTime.Now;
        }

服务器端缓存: 

app.UseResponseCaching();//启用服务器端相应缓存

缺点:

无法解决恶意请求给服务器带来的压力

内存缓存:

sqlServer做缓存性能并不好

memCached 做缓存专用,性能非常高,但是集群和高可用方面性能比较弱,而且有缓存jian的最大字节是250,可以安装EnyimMemchedCore这个Nuget包

Redis  也可以做缓存,但是它的性能要比MemCached 要稍微差一点,但是他的高可用和集群非常强大,适合在 数据量大,高可用方面使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值