2.1.0更新的内容有
更新引用类库
NHibernate 5.1.0
Npgsql 3.2.7
MySqlConnector 0.37.0
Dapper 1.50.4
Dommel 1.10.1
ZKWeb.System.Drawing 4.0.1
ZKWeb.Fork.FluentNHibernate 2.1.1
MongoDB.Driver 2.5.0
Microsoft.EntityFrameworkCore 2.0.2
Microsoft.EntityFrameworkCore.Design 2.0.2
Microsoft.EntityFrameworkCore.InMemory 2.0.2
Microsoft.EntityFrameworkCore.Sqlite 2.0.2
Microsoft.EntityFrameworkCore.SqlServer 2.0.2
Npgsql.EntityFrameworkCore.PostgreSQL 2.0.1
Pomelo.EntityFrameworkCore.MySql 2.0.1
System.Security.Cryptography.Algorithms 4.3.1
Microsoft.CodeAnalysis.CSharp 2.7.0
Microsoft.DiaSymReader.Native 1.7.0
Microsoft.DiaSymReader.PortablePdb 1.4.0
Microsoft.CSharp 4.4.1
Microsoft.Extensions.DependencyModel 2.0.4
Microsoft.CodeAnalysis.CSharp 2.6.1
Microsoft.AspNetCore.Hosting.Abstractions 2.0.2
Microsoft.AspNetCore.Http.Abstractions 2.0.2
MySql.Data 6.10.6
Microsoft.Data.Sqlite 2.0.1
Microsoft.Owin 4.0.0
Newtonsoft.Json 11.0.1
修复Bug
修复重用EFCore上下文没有重置状态的问题(前一个上下文失败的提交会影响后面的上下文)
改进插件系统
支持禁止自动重新加载插件
提供判断加载哪些插件的函数
改进ORM
修改dapper的mysql提供器到MySqlConnector (之前是Pomelo.Data.MySql)
让ZKWeb.ORM.NHibernate支持.Net Standard 2.0 (除了Sqlite以外的数据库都可用)
支持记录SQL语句或命令, 详细查看下面的简介或文档记录原始SQL语句或命令
改进路由系统
支持隐式注册Action
详细查看下面的简介或文档控制访问路径
添加基于electron的项目创建器 (感谢@hunjixin的贡献)
如何使用基于electron的项目创建器
Linux:
从Github的Release页面下载并解压缩 'ProjectCreator.Gui-linux-x64.zip'到'ZKWeb/Tools', 然后打开'ProjectCreator.Gui'.
Windows:
从Github的Release页面下载并解压缩 'ProjectCreator.Gui-win32-x64.rar'到'ZKWeb/Tools', 然后打开'ProjectCreator.Gui.exe'.
记录SQL语句或命令
记录原始SQL语句或命令
从ZKWeb 2.1开始, 你可以通过提供IDatabaseCommandLogger来记录原始的SQL语句或命令.
添加[ExportMany]属性注册到容器会全局记录, 例如:
[ExportMany]
public class Mylogger : IDatabaseCommandLogger {
public void LogCommand(IDatabaseContext context, string command, object metadata) {
Console.WriteLine(command);
}
}
如果只想记录某个上下文的语句, 则不要添加[ExportMany]而是设置Context.CommandLogger = new Mylogger().
目前支持记录SQL语句或命令的ORM有:
Dapper: 支持记录insert, update, delete, select
EFCore: 支持记录insert, update, delete, select
MongoDB: 支持记录json格式的命令
NHibernate: 支持记录insert, update, delete, select, 但不支持记录参数
隐式注册Action
从ZKWeb 2.1开始, 通过在控制器类上标记[ActionBase]属性, 或者在方法上标记[Action]属性可以控制访问路径.
例如:
[ExportMany]
public class ExampleController : IController {
// 不标记[ActionBase]也不标记[Action]
// 访问路径是 "/Example/PlainText"
public IActionResult PlainText() {
return new PlainResult("some plain text");
}
}
[ExportMany]
[ActionBase("/MyExample")]
public class ExampleController : IController {
// 标记[ActionBase]但不标记[Action]
// 访问路径是 "/MyExample/PlainText"
public IActionResult PlainText() {
return new PlainResult("some plain text");
}
}
[ExportMany]
[ActionBase("/MyExample")]
public class ExampleController : IController {
// 同时标记[ActionBase]和[Action]
// 访问路径是 "/MyExample/MyPlainText"
[Action("MyPlainText")]
public IActionResult PlainText() {
return new PlainResult("some plain text");
}
}
[ExportMany]
public class ExampleController : IController {
// 不标记[ActionBase], 只标记[Action] (兼容2.0之前的版本)
// [Action]标记的就是完整路径
// 访问路径是 "/MyPlainText"
[Action("/MyPlainText")]
public IActionResult PlainText() {
return new PlainResult("some plain text");
}
}
Core支持
因为NHibernate 5.1支持.Net Core, 基于NH编写的商城系统(http://demo.zkweb.org)已经可以在Linux上运行, 99%的功能都可用.
如果你使用ZKWeb框架创建新的项目,强烈推荐使用NHibernate而不是EFCore, 因为NHibernate的功能和.Net Framework上的一样完整.
下个版本
下个版本预计会做的事情
更换EFCore到2.1版本(支持懒加载, 自定义列类型和部分复杂查询)
对接柠檬的APM系统, 提供网页查询性能和数据库查询性能的监控