void CheckCacheRegion <TRegionEntity>(CacheRegion region)
        {
            var entityType = typeof(TRegionEntity);
            var metadata   = RepositoryFramework.GetDefineMetadataAndCheck(entityType);

            metadata.CheckCacheRegions(new CacheRegion[] { region });
        }
예제 #2
0
        public static object GetId(object entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            var metadata = RepositoryFramework.GetDefineMetadataAndCheck(entity.GetType());
            var ta       = TypeAccessor.GetAccessor(metadata.EntityType);

            return(ta.GetProperty(metadata.IdMember.Name, entity));
        }
예제 #3
0
        public static object CreateEntityProxy(Type entityType)
        {
            ClassDefineMetadata metadata = RepositoryFramework.GetDefineMetadataAndCheck(entityType);

            return(CreateProxy(entityType, metadata));

            //var ei = new EntityInterceptor(metadata);
            //ProxyGenerationOptions options = new ProxyGenerationOptions(new InnerHook(metadata));

            ////var t = generator.ProxyBuilder.CreateClassProxyType(entityType,new Type[0], options);
            ////
            //var proxy = generator.CreateClassProxy(entityType, options, ei);
            //ei.Inited = true;

            //return proxy;
        }
예제 #4
0
        internal static void ProxyJoins(object entity)
        {
            ClassDefineMetadata metadata = RepositoryFramework.GetDefineMetadataAndCheck(entity.GetType());

            var joins = metadata.ClassJoinDefines.Values.Cast <ClassJoinDefineMetadata>().Where(o => o.JoinType == MethodJoinType.PropertyGet);
            var ta    = TypeAccessor.GetAccessor(metadata.EntityType);

            foreach (var join in joins)
            {
                var value = ta.GetProperty(join.JoinName, entity);

                //已经为代理对象,直接忽略
                if (IsProxy(value))
                {
                    ((IProxy)value).Reset();
                    continue;
                }

                var type = join.Method.ReturnType;

                if (EntityUtil.IsGenericList(type))
                {
                    var itemType           = type.GetGenericArguments()[0];
                    var proxyType          = typeof(ProxyCollection <>).MakeGenericType(itemType);
                    IProxyCollection proxy = (IProxyCollection)FastActivator.Create(proxyType);
                    proxy.Init(entity, join);

                    ta.SetProperty(join.JoinName, entity, proxy);
                }
                else
                {
                    var ei    = new EntityProxyInterceptor(entity, join);
                    var proxy = ProxyProvider.GetCreateFunc(type)(new IInterceptor[] { ei });
                    ei.IsConstructed = true;
                    ta.SetProperty(join.JoinName, entity, proxy);
                }
            }
        }
예제 #5
0
 public LinqShardSession()
 {
     var metadata = RepositoryFramework.GetDefineMetadataAndCheck(typeof(TEntity));
 }