Ejemplo n.º 1
0
        /// <summary>
        /// 根据当前实体创建代理对象,然后可执行数据库更新操作,
        /// 代理对象将监视属性的赋值过程,当给代理对象的属性赋值后,对应的字段会标记为更新状态。
        /// </summary>
        /// <param name="context"></param>
        /// <returns>与实体相关的代理对象</returns>
        internal Entity GetProxy(DbContext context)
        {
            // context ,允许参数为 null

            IEntityProxy proxy = CreateProxy();

            (proxy as Entity)._context = context;                       // 仅在代理对象时才被赋值
            proxy.Init(this);

            return(proxy as Entity);
        }
Ejemplo n.º 2
0
        public static Entity LoadFromHttp(HttpContext context, ParameterInfo p)
        {
            // 这个方法原本就是给 ClownFish.Web 调用的,
            // 所以这里直接反射 ClownFish.Web 来调用它的实体填充逻辑。

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (p == null)
            {
                throw new ArgumentNullException(nameof(p));
            }

            Init();

            Entity resultObject = null;
            Entity entityObject = p.ParameterType.FastNew() as Entity;

            Type proxyType = EntityProxyFactory.GetProxy(p.ParameterType);

            if (proxyType != null)
            {
                IEntityProxy proxy = proxyType.FastNew() as IEntityProxy;
                proxy.Init(entityObject);
                resultObject = proxy as Entity;
            }
            else
            {
                resultObject = entityObject;
            }

            // 为了不直接依赖于 ClownFish.Web 项目,这里就采用反射方式处理
            object builder = ObjectFactory.New(s_builderType);

            s_method.FastInvoke(builder, context, resultObject, p);

            return(resultObject);
        }