Exemplo n.º 1
0
 private static void AddDbModelContext(DbModelContext ctx)
 {
     readerWriterLock.AcquireWriterLock(100);
     try
     {
         if (dbModelContexts.ContainsKey(ctx.DbContextName.ToLower()))
         {
             dbModelContexts[ctx.DbContextName.ToLower()] = ctx;
         }
         else
         {
             dbModelContexts.Add(ctx.DbContextName.ToLower(), ctx);
         }
     }
     catch (Exception e)
     {
         logger.LogError(e, "DbModelContextManager.AddDbModelContext.Error");
     }
     finally
     {
         if (readerWriterLock.IsWriterLockHeld)
         {
             readerWriterLock.ReleaseWriterLock();
         }
     }
 }
Exemplo n.º 2
0
        private static void BulidDataBaseInfo(XElement dbInfo)
        {
            var dBContexts = dbInfo?.Elements()?.ToArray();

            if (dBContexts == null || !dBContexts.Any())
            {
                logger.LogInformation("BulidDataBaseInfo.dBContexts=null");
                return;
            }

            foreach (var item in dBContexts)
            {
                DbModelContext ctx = new DbModelContext();
                ctx.DbContextName = item.Name?.ToString();
                ctx.DbType        = item.Attribute("DbType")?.Value;
                ctx.UserName      = item.Attribute("UserName")?.Value;
                ctx.PassWord      = item.Attribute("PassWord")?.Value;
                ctx.Database      = item.Attribute("Database")?.Value;
                int p = 0;
                int.TryParse(item.Attribute("Pool")?.Value, out p);
                ctx.Pool = p;
                XElement master = item.Element("Master");
                if (master == null)
                {
                    logger.LogInformation("DbModelContextManager.BulidDataBaseInfo.Error.master=null");
                    continue; // master 一定不能为空
                }

                int port = 0;
                int.TryParse(master.Attribute("Port")?.Value, out port);
                ctx.Master = new Master()
                {
                    Ip = master.Attribute("Ip")?.Value, Port = port
                };
                ctx.Slaves = new List <Slave>();
                XElement slave = item.Element("Slave");

                // 可以没有slave
                if (slave != null && slave.HasElements)
                {
                    XElement[] items = slave.Elements("Item")?.ToArray();
                    foreach (var slv in items)
                    {
                        int.TryParse(slv.Attribute("Pool")?.Value, out p);
                        int.TryParse(slv.Attribute("Port")?.Value, out port);
                        var s = new Slave()
                        {
                            Ip = slv.Attribute("Ip")?.Value, Pool = p, Port = port
                        };
                        ctx.Slaves.Add(s);
                    }
                }

                AddDbModelContext(ctx);
            }
        }