Scut 进阶:Schema 自动检测
Posted 青墨淡潋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scut 进阶:Schema 自动检测相关的知识,希望对你有一定的参考价值。
Scut 在启动时有一个自动根据代码中数据类型检查数据库字段的功能,要如何使用呢?
脚本引擎动态加载 ModelAssembly:
ScriptEngine.cs - InitScriptRuntimeScope:
EntitySchemaSet.LoadAssembly(scope.ModelAssembly);
EntitySchemaSet.cs - LoadAssembly:
var types = assembly.GetTypes().Where(p => p.GetCustomAttributes(typeof(EntityTableAttribute), false).Count() > 0).ToList(); foreach (var type in types) { InitSchema(type); }
可以得知,需要被检查数据库字段的,必须是 Model 文件夹下的带有“EntityTable”属性的结构。
EntitySchemaSet.cs - InitSchema:PropertyInfo[] propertyList = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);SchemaColumn column;
int number = 0; foreach (PropertyInfo property in propertyList) {
...
var entityField = FindAttribute<EntityFieldAttribute>(property.GetCustomAttributes(false));
if (entityField != null)
... }
... ...
CheckTableSchema(schema);
可以得知,要与数据库进行匹配检查的字段必须带有“EntityField”。
EntitySchemaSet.cs - CheckTableSchema:
if (dbprovider.CheckTable(tableName, out columns)) { ModifyTableSchema(schema, dbprovider, tableName, columns); }
else { CreateTableSchema(schema, dbprovider, tableName); }
对比 EntityTable 的 Column 与 数据库表中的 Column,有差异进行相应修改,如果没有该表则要建表。
说白了,只要配置正确了 sqlconnetion,连建表都帮你省了...
上一篇的 EntityChangeEvent 则是省了数据 Save ... 真是傻瓜式开发了。
以上是关于Scut 进阶:Schema 自动检测的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情