object IConvertible.ToType(Type conversionType, IFormatProvider provider)
 {
     try
     {
         IEntityBuffer eb = EntityBufferCollection.Instance[this.GetType()];
         if (eb != null)
         {
             return(eb.Get(this.Identity));
         }
         else
         {
             using (IRepository rep = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository(this.GetType()))
             {
                 rep.BeginTransaction();
                 var r = rep.Get(this.GetType(), this.Identity);
                 rep.CommitTransaction();
                 return(r);
             }
         }
     }
     catch (Exception ex)
     {
         throw new InvalidCastException("Convert is invalid!", ex);
     }
 }
        /// <summary>
        /// 读入数据
        /// </summary>
        public void LoadData()
        {
            // Load NameValueMappings
            NameValueMappingCollection.Instance.Clear();
            IList <NameValueMappingInfo> list = ADInfoBll.Instance.GetInfos <NameValueMappingInfo>();

            foreach (NameValueMappingInfo info in list)
            {
                if (info.OtherMembers == null)
                {
                    info.OtherMembers = string.Empty;
                }
                string[] ss      = info.OtherMembers.Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                string[] members = new string[ss.Length + 2];
                members[0] = info.ValueMember;
                members[1] = info.DisplayMember;
                for (int i = 0; i < ss.Length; ++i)
                {
                    members[2 + i] = ss[i].Trim();
                }
                NameValueMappingCollection.Instance.Add(new NameValueMapping(info.Name, info.TableName,
                                                                             members, info.WhereClause, info.ParentName));
                if (!string.IsNullOrEmpty(info.MemberVisible))
                {
                    ss = info.MemberVisible.Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string s in ss)
                    {
                        string[] s2 = s.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                        if (s2.Length != 2)
                        {
                            throw new ArgumentException("MemberVisible format in NameValueMappingInfo is invalid");
                        }
                        NameValueMappingCollection.Instance[info.Name].MemberVisible[s2[0].Trim()] = Convert.ToBoolean(s2[1], System.Globalization.CultureInfo.InvariantCulture);
                    }
                }

                var paramNames = GetParamsName(info.WhereClause);
                foreach (string s in paramNames)
                {
                    NameValueMappingCollection.Instance[info.Name].Params[s.Trim()] = System.DBNull.Value;
                }
            }

            // Load EntityBuffers
            EntityBufferCollection.Instance.Clear();
            IList <EntityBufferInfo> list2 = ADInfoBll.Instance.GetInfos <EntityBufferInfo>();

            foreach (EntityBufferInfo info in list2)
            {
                if (!string.IsNullOrEmpty(info.PersistentClass))
                {
                    Type          entityType = Feng.Utils.ReflectionHelper.GetTypeFromName(info.PersistentClass);
                    string        typeNeme   = "Feng.EntityBuffer`2[[" + info.PersistentClass + "],[" + info.IdTypeName + "]], Feng.Model";
                    Type          type       = Feng.Utils.ReflectionHelper.GetTypeFromName(typeNeme);
                    IEntityBuffer eb         = Feng.Utils.ReflectionHelper.CreateInstanceFromType(type, new object[] { info.Name }) as IEntityBuffer;
                    EntityBufferCollection.Instance.Add(eb);
                }
            }
        }
Example #3
0
        public virtual void PreparingOperate(OperateArgs e)
        {
            if (e.OperateType == OperateType.Save)
            {
                费用实体 entity = e.Entity as 费用实体;

                string        typeName = entity.GetType().FullName;
                IEntityBuffer eb       = EntityBufferCollection.Instance[typeof(费用类别)];

                if (entity.费用实体类型编号 == 0)
                {
                    foreach (费用类别 i in eb)
                    {
                        if (i.代码类型名 == typeName)
                        {
                            entity.费用实体类型编号 = i.代码;
                            break;
                        }
                    }
                }

                if (string.IsNullOrEmpty(entity.编号))
                {
                    string preKeyValue = Feng.Utils.RepositoryHelper.GetRepositoryPk(e.Repository, typeName);
                    if (string.IsNullOrEmpty(preKeyValue))
                    {
                        foreach (费用类别 i in eb)
                        {
                            if (i.代码类型名 == typeName)
                            {
                                entity.编号   = PrimaryMaxIdGenerator.GetMaxId("财务_费用实体", "编号", 8, i.前缀).ToString();
                                preKeyValue = entity.编号;
                                Feng.Utils.RepositoryHelper.SetRepositoryPk(e.Repository, typeName, preKeyValue);
                                break;
                            }
                        }
                    }
                    else
                    {
                        int delta = Feng.Utils.RepositoryHelper.GetRepositoryDelta(e.Repository, typeName);

                        foreach (费用类别 i in eb)
                        {
                            if (i.代码类型名 == typeName)
                            {
                                entity.编号 = PrimaryMaxIdGenerator.GetMaxIdFromPrevId(preKeyValue, i.前缀, delta + 1);
                                break;
                            }
                        }
                    }
                    if (string.IsNullOrEmpty(entity.编号))
                    {
                        throw new InvalidOperationException("Invalid 费用实体类型 of " + typeName);
                    }
                }
            }
        }
        private object TryGetCachedTarget(Type persistentClass, object id)
        {
            IEntityBuffer eb = EntityBufferCollection.Instance[persistentClass];

            if (eb == null)
            {
                return(null);
            }
            return(eb.Get(id));
        }
Example #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public object Get(Type type, object id)
        {
            IEntityBuffer eb = this[type];

            if (eb == null)
            {
                throw new ArgumentException(string.Format("There is no EntityBuffer with {0}!", type));
            }
            return(eb.Get(id));
        }
Example #6
0
        /// <summary>
        /// 加入一个EntityBuffer
        /// </summary>
        /// <param name="eb">IEntityBuffer</param>
        public void Add(IEntityBuffer eb)
        {
            if (eb == null)
            {
                throw new ArgumentNullException("eb");
            }

            if (m_buffers.ContainsKey(eb.EntityName))
            {
                return;
            }

            m_buffers.Add(eb.EntityName, eb);
        }
 ///<inheritdoc/>
 public override void Initialize()
 {
     Entities = Info.Admin.Entities;
     Entities.RegisterSystem(this);
     base.Initialize();
 }
Example #8
0
 /// <summary>
 /// Constructs an engine loader with the given parameters using the default admin
 /// </summary>
 /// <param name="targetLogicFrameLength">the frame length in seconds of logic updates which the engine will attempt to keep</param>
 /// <param name="targetMaxRenderFrameLength">the frame length in seconds of render updates which the engine will try to stay below</param>
 /// <param name="componentTypeRegistry">the component type registry to use to store component types</param>
 /// <param name="systemRegistry">the system registry to store systems</param>
 /// <param name="entityBuffer">the entity buffer to use to store entities</param>
 protected EngineLoader(IComponentTypeRegistry componentTypeRegistry,
                        ISystemRegistry systemRegistry, IEntityBuffer entityBuffer, float targetLogicFrameLength = 1f / 60f, float targetMaxRenderFrameLength = 1f / 30f)
 {
     Admin = new EntityAdmin(targetLogicFrameLength, targetMaxRenderFrameLength, componentTypeRegistry, systemRegistry, entityBuffer);
 }