ASPNETCORE MVC5 使用记录

1、JOSNResult属性首字母小写的问题。

在Startup.cs中ConfigureServices 修改配置。

 services.AddMvc().AddJsonOptions(options =>
            {
                ////格式化日期时间格式
                //options.JsonSerializerOptions.Converters.Add(new DatetimeJsonConverter());
                ////数据格式首字母小写
                ////options.JsonSerializerOptions.PropertyNamingPolicy =JsonNamingPolicy.CamelCase;
                //数据格式原样输出
                options.JsonSerializerOptions.PropertyNamingPolicy = null;
                ////取消Unicode编码
                //options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
                ////忽略空值
                //options.JsonSerializerOptions.IgnoreNullValues = true;
                ////允许额外符号
                //options.JsonSerializerOptions.AllowTrailingCommas = true;
                ////反序列化过程中属性名称是否使用不区分大小写的比较
                //options.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
            })

  

2、EFCORE 5.0 对SQL Server 2008 R2 兼容问题

  据说从某版本开始EF对SQL Server 2008 R2的兼容性不好了,具体应该是想强制让大家买最新的SQL SERVER 2012及以上版本,功能受限,简单的查询使用是没问题的,当开始制作分页查询的时候问题来了。

代码 

var list = db.sys_user.Skip((page-1) * limit).Take(limit).ToList();

EF会报错【System.Data.SqlClient.SqlException: ‘OFFSET’ 附近有语法错误】,在老版本中使用通过配置以下代码解决,但是在EFCORE5中,API已经被移除。

services.AddDbContext(options => options.UseSqlServer(connection,b=>b.UseRowNumberForPaging()));

经过查阅发现了以下方案,使用nuget 搜索安装 【EfCore.SqlServer2008Query】包,然后添加配置代码。目前功能使用正常,还未发现问题。

optionsBuilder.ReplaceService<IQueryTranslationPostprocessorFactory, SqlServer2008QueryTranslationPostprocessorFactory>();

3、Server.MapPath()的替代方法

在Controller的构造方法中传入参数并使用

    private IWebHostEnvironment Environment;
        public SystemLogController(IWebHostEnvironment _environment)
        {
            Environment = _environment;
       //Environment.WebRootPath }

  

4、JSONResult 日期格式化的问题

处理方案参考:https://www.cnblogs.com/jesen1315/p/12666737.html

public class DateTimeConverter : JsonConverter<DateTime>
{
    public string DateTimeFormat { get; set; } = "yyyy-MM-dd HH:mm:ss";

    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => DateTime.Parse(reader.GetString());

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) => writer.WriteStringValue(value.ToString(this.DateTimeFormat));
}
services.AddMvc().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
}

5、EntityFrameworkCore 查看 linq要执行的语句方法

在原来版本的使用中直接使用ToString()就可以查看到生成的语句,但现在使用的这个版本没办法看了对调试非常的不方便。

网络搜索处理方案参考:https://www.cnblogs.com/fancyblogs/p/10535214.html

通过nuget添加引用 Microsoft.Extensions.Logging.Debug

找到EF的DbContext文件,头部引用

using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Debug;

 在DbContext文件里定义一个日志工厂

        public static readonly LoggerFactory MyLoggerFactory = new LoggerFactory(new[] {
            new DebugLoggerProvider()
        });

在DbContext文件OnConfiguring连接字符前添加日志UseLoggerFactory(MyLoggerFactory)

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseLoggerFactory(MyLoggerFactory).UseMySql("");
            }
        }

运行查看 在输出面板里查看

 

posted @ 2021-09-27 08:30  jgjg2323  阅读(151)  评论(0编辑  收藏  举报