分类 .Net Core 下的文章

Microsoft.EntityFrameworkCore;//必选.
Microsoft.EntityFrameworkCore.数据库类型;//按数据库选.
Microsoft.EntityFrameworkCore.数据库类型.Design;//一般二选一
Microsoft.EntityFrameworkCore.数据库类型.Tool;//一般二选一

语句

dotnet ef dbContext scaffold
"server=127.0.0.1;database=database;username=xxx;pwd=xxx;" |
Microsoft.EntityFramworkCore.数据库类型
-o Entities

https://blog.csdn.net/EAyayaya/article/details/124048491

内存中,键值对集.

使用步骤

1.注册
记得注册为单例;
2.注入
3.使用
存:
memoryCache.Set(path,context.Result as ObjectResult);
取:
if( memoryCache.TryGetValue(Path,out object value) )
{
context.Result = value as ObjectResult;
}

Context中包含:

ActionDescriptor

Filters

HttpContext

ModelState

Result

RouteData

类型

.Net中Filter都是以特性的形式存在,有如下五类:

  • AuthorizationFilters
  • ReousrceFilters
  • ActionFilters
  • ExceptionFilters
  • ResultFilters

AuthorizationFilters

常做权限验证;

ReousrceFilters

常做缓存;

ActionFilters

常做模型验证、日志记录;

ExceptionFilters

异常捕获;

作用范围

只能捕获ActionFilter及ActionExecution时的报错.

例子

 OnException(ExceptionContext context)
 {
  //记录日志
 }

ResultFilters

处理返回结果。

作用范围

仅Result不为空时才能够执行,若短路器执行或管道中抛出异常,则会跳过ResultFilter.

注册

注册方式

  • 方法注册

将特性注解在方法上;

  • 类注册

将特性注解在类上;

  • 全局注册

在注册Controller时使用委托注册,如:

Builder.Service.AddController( o => o.Filter.Add<CumFilter>());

## 优先级
不同类型Filter按管道模型顺序执行,相同类型的 全局>类>方法;
也可以再注册时指定 add( int order),小的优先;

短路器

当Context.Result被赋值时,将会跳过后续的管线步骤,直接返回结果,这一机制叫做短路器.

利用短路器实现缓存:

在ResourceFilter中:

public class ResourceFilter : Attribute, IResourceFilter
{
    private Static Dictionary< string, object > _dirCache = new Dictionary< string, object >();
    public void OnResourceExecuting(esourceExecutingContext context)
    {
        var path = context.HttpContext.Request.Path;
        _dirCache[path] = context.Result as ObjectReslut;

    }
    public void OnResourceExxcuted(ResourceExecutedContext context)
    {
        var path = context.HttpContext.Request.Path;
        if( _dirCache.ContainsKey(path) ) 
        {
            context.Result = _dirCache[path]  as ObjectReslut;
        }
    }
}

[TypeFilter(typeOf(xxxActionFilterAttribute))]
[ServiceFilter(typeOf(xxxActionFilterAttribute))] // 使用此条需在build中注册改过滤器及其需要注入的参数;