首页 > 代码库 > Scut 进阶:Schema 自动检测
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 自动检测
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。