Example #1
0
        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);
            }
        }
Example #2
0
        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();
                    }
                }
            }
        }
Example #3
0
        /// <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
                {
                }
            }
        }