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); } } }
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)); }
/// <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)); }
/// <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(); }
/// <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); }