.net core ef 读取mysql json字段过程记录
1、建表
CREATE TABLE `file_parsed_info` ( `ID` char(36) COLLATE utf8mb4_general_ci NOT NULL, `FILE_NAME` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件名称', `FILE_CONTENT` json DEFAULT NULL COMMENT '解析后的内容', PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='已转换的文件';
2、添加nuget引用
Pomelo.EntityFrameworkCore.MySql
3、添加连接字符串的配置
在appsetting里添加如下的节点
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "ConnectionStrings": { "Database": "Server=127.1.1.1;User Id=sa;Password=111111;Database=dki_file_trace;" }, "AllowedHosts": "*" }
4、添加实体类
public class file_parsed_info { public Guid ID { get; set; } public string FILE_NAME { get; set; }public string FILE_CONTENT; [NotMapped] public JObject FILE_CONTENT_JSON { get { return JsonConvert.DeserializeObject<JObject>(string.IsNullOrEmpty(FILE_CONTENT) ? "{}" : FILE_CONTENT); } set { FILE_CONTENT = value.ToString(); } } }
5、添加Content上下文
注意下面标红加粗的那一行,不加那一条,就读不出来json对象的值
public class MySqlDbContext : DbContext { public MySqlDbContext() { } public MySqlDbContext(DbContextOptions<MySqlDbContext> options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<file_parsed_info>().Property<string>("FILE_CONTENT").HasField("FILE_CONTENT"); } public DbSet<file_parsed_info> file_parsed_info { get; set; } }
6、添加startup文件
public void ConfigureServices(IServiceCollection services) { string connectionString = Configuration.GetConnectionString("Database"); services.AddDbContext<MySqlDbContext>(options => options.UseMySql(connectionString, ServerVersion.Parse("8.0.18"), null)); }
7、在controller里使用
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private readonly MySqlDbContext _context; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger, MySqlDbContext context) { _logger = logger; _context = context; } [HttpGet] public string Get() { var model = _context.file_parsed_info.FirstOrDefault(); var result = Newtonsoft.Json.JsonConvert.SerializeObject(model); return result; }