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(""); } }
运行查看 在输出面板里查看