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