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 自动检测的主要内容,如果未能解决你的问题,请参考以下文章

SCUT - 354 - CC的简单多项式 - 杜教筛

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

人脸检测进阶:使用 dlibOpenCV 和 Python 检测眼睛鼻子嘴唇和下巴等面部五官

scut和unity之间收发请求返回

使用 Pygments 检测代码片段的编程语言

如何使用模块化代码片段中的LeakCanary检测内存泄漏?