码迷,mamicode.com
首页 > 其他好文 > 详细

Scut 进阶:Schema 自动检测

时间:2016-09-01 14:25:36      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

  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 自动检测

标签:

原文地址:http://www.cnblogs.com/Daniel-Liang/p/5824103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!