/// <summary> /// 获取模型列集合 /// </summary> /// <returns></returns> public IList <ModelColumn> GetColumns() => ModelColumn.FindAll(ModelColumn._.TableId == Id);
/// <summary> /// 根据菜单和实体工厂创建模型表和模型列 /// </summary> /// <param name="factory"></param> public static ModelTable ScanModel(String areaName, String ctrlName, String ctrlFullName, String url, IEntityFactory factory) { //var entityTypeName = menu.Name; // 菜单名从控制器名称里面取 //var ctrlFullName = menu.FullName; //var url = menu.Url.TrimStart("~"); //if (areaName.IsNullOrWhiteSpace()) areaName = menu.Parent.Name; //// var areaName = menu.Parent.Name; // 这里Parent有可能为空,读取不到父级 var table = ModelTable.FindByCategoryAndName(areaName, ctrlName); // var table = ModelTable.Meta.Cache.Find(e => e.Category.EqualIgnoreCase(areaName) && e.Name == entityTypeName); // var table = ModelTable.Find(ModelTable._.Category == areaName & ModelTable._.Name == entityTypeName); if (table == null) { table = new ModelTable { Name = ctrlName, Enable = true } } ; table.Category = areaName; table.Url = url; table.Controller = ctrlFullName; table.Fill(factory.Table); table.Save(); var columns = ModelColumn.FindAllByTableId(table.Id); var idx = 1; foreach (var field in factory.AllFields) { if (!field.IsDataObjectField && field.Type.GetTypeCode() == TypeCode.Object) { continue; } var column = columns.FirstOrDefault(e => e.Name == field.Name); if (column == null) { column = new ModelColumn { Name = field.Name, Enable = true, ShowInList = true, ShowInForm = ShowInForm.详情 | ShowInForm.添加 | ShowInForm.编辑, }; columns.Add(column); } column.TableId = table.Id; column.Sort = idx++; column.Fill(field); column.SetWidth(); column.Save(); } //columns.Save(); // 模型表已是异步执行模型表生成,这里使用同步保存模型列 return(table); } #endregion }
public static void ScanModel(String areaName, IList <IMenu> menus) { var models = ModelTable.FindAll().Where(e => e.Category.EqualIgnoreCase(areaName)).ToList(); foreach (var menu in menus.OrderByDescending(e => e.Sort)) { if (menu.FullName.IsNullOrEmpty()) { continue; } var ctrl = menu.FullName.GetTypeEx(); if (ctrl == null || !ctrl.BaseType.IsGenericType) { continue; } var entityType = ctrl.BaseType.GenericTypeArguments.FirstOrDefault(); if (entityType == null || !entityType.As <IEntity>()) { continue; } var factory = entityType.AsFactory(); if (factory == null) { continue; } var table = models.FirstOrDefault(e => e.Name == entityType.Name); if (table == null) { table = new ModelTable { Name = entityType.Name, Enable = true } } ; table.Category = areaName; table.Url = menu.Url.TrimStart("~"); table.Controller = ctrl.FullName; table.Fill(factory.Table); table.Save(); var columns = ModelColumn.FindAllByTableId(table.Id); var idx = 1; foreach (var field in factory.AllFields) { if (!field.IsDataObjectField && field.Type.GetTypeCode() == TypeCode.Object) { continue; } var column = columns.FirstOrDefault(e => e.Name == field.Name); if (column == null) { column = new ModelColumn { Name = field.Name, Enable = true, ShowInList = true, ShowInForm = true, }; columns.Add(column); } column.TableId = table.Id; column.Sort = idx++; column.Fill(field); //column.Save(); } columns.Save(); } } #endregion }