public static IObjectProxy GetDbMemoryCache(SqlCon con, Model Model, object id, Context.ICurrentContextFactory confac) { var modellist = GetCachedList(con.ToString(), Model.Name, DbCachedList); if (modellist.ContainsKey(id)) { var ob = modellist[id]; ob.LastUsedTime = DateTime.Now; ob.UsedCount++; return(ob.CachedOb); } else { var memitem = new CacheItem(); memitem.Key = id; memitem.CachedOb = new SqlDataProxy(Model, confac, LoadType.Null, con) { ID = id }; modellist.TryAdd(id, memitem); return(memitem.CachedOb); } }
public void UpdateModel(Model model, SqlCon modelSqlCon, SqlCon dataSqlCon) { ModelSqlServerFactory sqlFac = new ModelSqlServerFactory(null); IObjectProxy proxy = new ObjectProxy(Global.ModeMode, this.ConFac, LoadType.Complete); var helper = new ModelHelper(this.ConFac); var modelDb = new SqlServer.dbContext(modelSqlCon, this.ConFac); model.SqlCon = dataSqlCon; if (model.Module != null) { model.Module.SqlCon = dataSqlCon; } helper.SetProxy(ref proxy, model); if (modelDb.IsExits(proxy) == false) { modelDb.Create(proxy); } else { modelDb.Save(proxy); } using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(dataSqlCon.ToString())) { con.Open(); var command = sqlFac.GenerateUpdate(model); command.Connection = con; command.ExecuteNonQuery(); foreach (var relation in model.Relations) { var relationcommand = sqlFac.GetRelationSql(relation, model); if (relationcommand != null) { relationcommand.Connection = con; relationcommand.ExecuteNonQuery(); } } } }
/// <summary> /// /// </summary> /// <param name="Source">模型</param> /// <param name="ModelSqlCon">存储模型的数据库</param> /// <param name="DataBaseSqlCon">要创建的数据库的</param> public void InstallModules(IModuleSource Source, SqlCon ModelSqlCon, SqlCon DataBaseSqlCon) { ConnectionType ConnectionType = ConnectionType.AppSys; if (ModelSqlCon.ToString() == DataBaseSqlCon.ToString()) { ConnectionType = ConnectionType.AppSys; } else { ConnectionType = ConnectionType.Current; } //System.Diagnostics.Trace.WriteLine("MODEL:"+ModelSqlCon.ToString()); //System.Diagnostics.Trace.WriteLine("CON:"+ModelSqlCon.ToString()); var modelDb = new SqlServer.dbContext(ModelSqlCon, this.ConFac); var DataDb = new SqlServer.dbContext(DataBaseSqlCon, this.ConFac); var modelMode = Global.ModeMode; var moduleMode = Global.ModuleMode; var viewMode = Global.ViewMode; var relationMode = Global.RelationModel; List <IObjectProxy> insertItems = new List <IObjectProxy>(); ModelSqlServerFactory sqlFac = new ModelSqlServerFactory(Source); var viewFac = new Soway.Model.View.AutoViewFactory(ModelSqlCon, this.ConFac); Dictionary <object, System.Data.IDbCommand> commands = new Dictionary <object, System.Data.IDbCommand>(); Dictionary <object, System.Data.IDbCommand> relationsCommands = new Dictionary <object, System.Data.IDbCommand>(); var helper = new ModelHelper(this.ConFac); var modules = Source.GetModules(); CreateDataBase(DataBaseSqlCon); foreach (var module in modules.Distinct()) { module.SqlCon = DataBaseSqlCon; IObjectProxy moduleproxy = new ObjectProxy(moduleMode, this.ConFac); helper.SetProxy(ref moduleproxy, module); if (modelDb.IsExits(moduleproxy) == true) { } else { insertItems.Add(moduleproxy); } foreach (var model in Source.GetModels(module)) { IObjectProxy proxy = new ObjectProxy(modelMode, this.ConFac, LoadType.Complete); helper.SetProxy(ref proxy, model); if (modelDb.IsExits(proxy) == false) { insertItems.Add(proxy); } if (model.ModelType != ModelType.Enum) { var command = sqlFac.GerateCreateSql(model); if (commands.ContainsKey(model)) { commands[model] = command; } else { commands.Add(model, command ); } foreach (var relation in model.Relations) { if (relationsCommands.ContainsKey(relation) == false) { relationsCommands.Add(relation, sqlFac.GetRelationSql(relation)); } } var itemView = viewFac.CreateDefaultItemView(model); itemView.ConnectionType = ConnectionType; IObjectProxy itemViewProxy = new ObjectProxy(viewMode, this.ConFac); var view = viewFac.CreateDefaultListView(model); IObjectProxy viewProxy = new ObjectProxy(viewMode, this.ConFac); view.ConnectionType = ConnectionType; helper.SetProxy(ref itemViewProxy, itemView); insertItems.Add(itemViewProxy); helper.SetProxy(ref viewProxy, view); insertItems.Add(viewProxy); } } } //创建表 foreach (var command in commands) { DataDb .Excute(command.Value as System.Data.SqlClient.SqlCommand); } foreach (var command in relationsCommands) { DataDb .Excute(command.Value as System.Data.SqlClient.SqlCommand); } //插入数据 Soway.Data.Graphic.Graphic <IObjectProxy> proxyMaps = new Data.Graphic.Graphic <IObjectProxy>(); foreach (var item in insertItems) { proxyMaps.Add(item); foreach (var ob in item.Model.Properties) { if (item[ob] is IObjectProxy) { proxyMaps.AddEdge(item[ob] as IObjectProxy, item); } } } while (proxyMaps.Nodes.Count > 0) { var ob = proxyMaps.GetTopNode(); if (ob == null) { ob = proxyMaps.Nodes[0].Data; } proxyMaps.Remove(ob); if (modelDb.IsExits(ob) == false) { modelDb.Create(ob); } else { } } }