public void Load(XmlDocument xdoc) { LoadStandart(); foreach (XmlNode xproject in xdoc.SelectNodes("descendant::project")) { MEDMProject pr = Load <MEDMProject>(xproject); foreach (XmlNode xclass in xproject.SelectNodes("descendant::class")) { MEDMClass c = Load <MEDMClass>(xclass); pr.Classes.Add(c); foreach (XmlNode xprop in xclass.SelectNodes("descendant::prop")) { MEDMProp p = Load <MEDMProp>(xprop, c.Name); c.Props.Add(p); } } } }
public void LoadStandart() { MEDMClass c = null; MEDMProp p = null; //---------------------------------------------------- c = MainDic.NewObj <MEDMClass>("MEDMIdObj"); c.Header = "Базовый класс для конфигураций"; p = MainDic.NewObj <MEDMProp>("MEDMIdObj.Id"); p.Header = "Id"; c.Props.Add(p); //---------------------------------------------------- c = MainDic.NewObj <MEDMClass>("MEDMNameObj"); c.Header = "Базовый класс для объектов с автоинкрементным Id"; p = MainDic.NewObj <MEDMProp>("MEDMNameObj.Id"); p.Header = "Id"; c.Props.Add(p); //---------------------------------------------------- c = MainDic.NewObj <MEDMClass>("MEDMGuidObj"); c.Header = "Базовый класс для объектов с Guid"; p = MainDic.NewObj <MEDMProp>("MEDMGuidObj.Id"); p.Header = "Id"; c.Props.Add(p); //---------------------------------------------------- c = MainDic.NewObj <MEDMClass>("MEDMCfgObj"); c.Header = "Базовый класс для конфигураций"; c.BaseId = "MEDMNameObj"; p = MainDic.NewObj <MEDMProp>("MEDMCfgObj.Id"); p.Header = "Наименование"; c.Props.Add(p); }
// Класс модели public string GenClassesClass(MEDMClass mc) { _ = $@"#region [{mc.Name}] {mc.Header}"; if (mc.Type == MEDMClassType.ENUM) { _ = $@"public enum {mc.Name}"; _ = $"{{"; _ = $@"NONE=0 // не задано"; foreach (MEDMProp mp in mc.Props) { _ = $@",{mp.Name} // {mp.Header}"; } _ = $"}}"; } else { _ = $@"[DbTable(Type = ""{mc.Type}"")]"; _ = $@"[EDMClass(Header = ""{mc.Header}"")]"; _ = $@"public partial class {mc.Name}: {mc.Base.Name}"; _ = $"{{"; foreach (MEDMProp mp in mc.Props) { GenClassesProp(mp, mc); } if (!string.IsNullOrEmpty(mc.ToString)) { _ = $@"public override string ToString()"; _ = $@"{{"; _ = $@"return $""{mc.ToString}"";"; _ = $@"}}"; } _ = $"}}"; } _ = $"#endregion"; return(Result.ToString()); }
// Свойство класса public string GenClassesProp(MEDMProp mp, MEDMClass mc) { _ = $"#region [{mp.Name}] {mp.Header}"; switch (mp.Type) { // Не задано case MEDMPropType.NONE: { break; } // Ссылка или конфигурация case MEDMPropType.CFG: case MEDMPropType.REF: { if (mp.Ref == null) { __ = $"error: {mc.Name}.{mp.Name} - ссылка не задан или задан неправильно ({mp.RefId})"; break; } if (mp.Ref.IdType == null) { __ = $"error: {mc.Name}.{mp.Name} - тип ссылки определить невозможно ({mp.RefId})"; break; } _ = $@" private {mp.Ref.IdType.Name} _{mp.Name}Id = default({mp.Ref.IdType.Name}); [DbColumn(Type = ""{mp.Ref.IdColumnType}"", Def =""{mp.Ref.IdColumnDef}"", Virtual ={mp.Virtual.ToString().ToLower()})] [EDMProperty(PropType=""{mp.Type}"", ItemType=typeof({mp.Ref.IdType.Name}), Header=""{mp.Header} (Id)"", Virtual ={mp.Virtual.ToString().ToLower()})] {mp.JsonIgnoreAttribute} public {mp.Ref.IdType.Name} {mp.Name}Id {{ get {{ return _{mp.Name}Id; }} set {{ Model.UpdateProperty(this, ""{mp.Name}Id"", _{mp.Name}Id, value, typeof({mp.Ref.IdType.Name}), typeof({mp.Ref.Name}), {mp.Virtual.ToString().ToLower()}); _{mp.Name}Id=value; }} }}"; _ = $@" private {mp.Ref.Name} _{mp.Name} = default({mp.Ref.Name}); [EDMProperty(PropType=""{mp.Type}"", ItemType=typeof({mp.Ref.Name}), Header=""{mp.Header}"", Virtual ={mp.Virtual.ToString().ToLower()})] {mp.JsonIgnoreAttribute} public {mp.Ref.Name} {mp.Name} {{ get {{ if (_{mp.Name}==null && _{mp.Name}Id!=default({mp.Ref.IdType.Name})) {{ Model.UpdateFutureRef(typeof({mp.Ref.Name}), ""{mp.Ref.Name}"", ""Id"", ""{mp.Ref.IdType}""); _{mp.Name} = Model.MainDic.GetObj<{mp.Ref.Name}>({mp.Name}Id); }} return _{mp.Name}; }} }} //public bool ShouldSerialize{mp.Ref.Name}() //{{ // return false; //}} "; break; } // Свойства case MEDMPropType.PROPS: { _ = $@" private string _S{mp.Name} = default(string); [DbColumn(Type = ""nvarchar(MAX)"", Def =""''"", Virtual ={mp.Virtual.ToString().ToLower()})] [EDMProperty(PropType=""PROPS"", ItemType=typeof(String), Header=""{mp.Header}"", Virtual ={mp.Virtual.ToString().ToLower()})] {mp.JsonIgnoreAttribute} public string S{mp.Name} {{ get {{ return _S{mp.Name}; }} set {{ Model.UpdateProperty(this, ""S{mp.Name}"", _S{mp.Name}, value, typeof(string), null, {mp.Virtual.ToString().ToLower()}); _S{mp.Name}=value; }} }} private MProps _{mp.Name} = null; [Ignore] {mp.JsonIgnoreAttribute} public MProps {mp.Name} {{ get {{ if (_{mp.Name}==null) _{mp.Name}= new MProps(this, ""S{mp.Name}""); return _{mp.Name}; }} }}"; break; } // Список case MEDMPropType.LIST: { if (mp.Ref == null) { __ = $"error: {mc.Name}.{mp.Name} - ссылка не задан или задан неправильно ({mp.RefId})"; break; } if (mp.Ref.IdType == null) { __ = $"error: {mc.Name}.{mp.Name} - тип ссылки определить невозможно ({mp.RefId})"; break; } _ = $@" private List<{mp.Ref.Name}> _{mp.Name} = null; [EDMProperty(PropType=""{mp.Type}"", ItemType=typeof({mp.Ref.Name}), Header=""{mp.Header}"", Virtual ={mp.Virtual.ToString().ToLower()})] {mp.JsonIgnoreAttribute} public List<{mp.Ref.Name}> {mp.Name} {{ get {{ if (_{mp.Name}==null) {{ _{mp.Name} = new List<{mp.Ref.Name}>(); }} return _{mp.Name}; }} }} "; break; } { if (mp.Ref == null) { __ = $"error: {mc.Name}.{mp.Name} - ссылка не задан или задан неправильно ({mp.RefId})"; break; } if (mp.Ref.IdType == null) { __ = $"error: {mc.Name}.{mp.Name} - тип ссылки определить невозможно ({mp.RefId})"; break; } _ = $@" private Dictionary<string, List<{mp.Ref.Name}>> _{mp.Name} = null; [EDMProperty(PropType=""{mp.Type}"", ItemType=typeof({mp.Ref.Name}), Header=""{mp.Header}"", Virtual ={mp.Virtual.ToString().ToLower()})] {mp.JsonIgnoreAttribute} public Dictionary<string, List<{mp.Ref.Name}>> {mp.Name} {{ get {{ if (_{mp.Name}==null) {{ _{mp.Name} = new Dictionary<string, List<{mp.Ref.Name}>>(); }} return _{mp.Name}; }} }} "; break; } case MEDMPropType.ENUM: { if (mp.Ref == null) { __ = $"error: {mc.Name}.{mp.Name} - ссылка не задан или задан неправильно ({mp.RefId})"; break; } if (mp.Ref.IdType == null) { __ = $"error: {mc.Name}.{mp.Name} - тип ссылки определить невозможно ({mp.RefId})"; break; } break; _ = $@" private {mp.Ref.Name} _{mp.Name} = default({mp.Ref.Name}); [DbColumn(Type = ""{mp.ColumnType}"", Def =""{mp.ColumnDef}"", Virtual ={mp.Virtual.ToString().ToLower()})] [EDMProperty(PropType=""{mp.Type}"", ItemType=typeof({mp.Ref.Name}), Header=""{mp.Header}"", Virtual ={mp.Virtual.ToString().ToLower()})] {mp.JsonIgnoreAttribute} public {mp.Ref.Name} {mp.Name} {{ get {{ return _{mp.Name}; }} set {{ Model.UpdateProperty(this, ""{mp.Name}"", _{mp.Name}, value, typeof({mp.Ref.Name}), null, {mp.Virtual.ToString().ToLower()}); _{mp.Name}=value; }} }}"; break; } // По умолчанию default: { if (mp.PropType == null) { __ = $"error: {mc.Name}.{mp.Name} - тип не задан или задан неправильно ({mp.Type})"; break; } _ = $@" private {mp.PropType.Name} _{mp.Name} = default({mp.PropType.Name}); [DbColumn(Type = ""{mp.ColumnType}"", Def =""{mp.ColumnDef}"", Virtual ={mp.Virtual.ToString().ToLower()})] [EDMProperty(PropType=""{mp.Type}"", ItemType=typeof({mp.PropType.Name}), Header=""{mp.Header}"", Virtual ={mp.Virtual.ToString().ToLower()})] {mp.JsonIgnoreAttribute} public {mp.PropType.Name} {mp.Name} {{ get {{ return _{mp.Name}; }} set {{ Model.UpdateProperty(this, ""{mp.Name}"", _{mp.Name}, value, typeof({mp.PropType.Name}), null, {mp.Virtual.ToString().ToLower()}); _{mp.Name}=value; }} }}"; break; } } _ = $"#endregion"; return(Result.ToString()); }