public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic) { try { RafyEnvironment.ThreadPortalCount++; object res = null; //只是不要纯客户端,都直接使用本地访问 if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly) { res = FinalDataPortal.Fetch(objectType, criteria); } else { var proxy = GetDataPortalProxy(); var dpContext = CreateDataPortalContext(); var result = proxy.Fetch(objectType, criteria, dpContext); res = ReadServerResult(result); } return res; } finally { RafyEnvironment.ThreadPortalCount--; } }
/// <summary> /// 使用门户查询 /// </summary> /// <param name="objectType"></param> /// <param name="criteria"></param> /// <param name="loc">如果一个数据层方法需要在本地执行,应该在把本参数指明为 Local。</param> /// <returns></returns> public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic) { try { RafyEnvironment.ThreadPortalCount++; object res = null; //只是不要纯客户端,都直接使用本地访问 if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly) { res = FinalDataPortal.Fetch(objectType, criteria); } else { var proxy = GetDataPortalProxy(); var dpContext = CreateDataPortalContext(); var result = proxy.Fetch(objectType, criteria, dpContext); res = ReadServerResult(result); } return(res); } finally { RafyEnvironment.ThreadPortalCount--; } }
/// <summary> /// Called by the business object's Save() method to /// insert, update or delete an object in the database. /// </summary> /// <param name="obj">A reference to the business object to be updated.</param> /// <param name="loc">The loc.</param> /// <returns> /// A reference to the updated business object. /// </returns> /// <remarks> /// Note that this method returns a reference to the updated business object. /// If the server-side DataPortal is running remotely, this will be a new and /// different object from the original, and all object references MUST be updated /// to use this new object. /// </remarks> public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic) { object res = null; //只是不要纯客户端,都直接使用本地访问 if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly) { /*********************** 代码块解释 ********************************* * * 由于开发人员平时会使用单机版本开发,而正式部署时,又会选用 C/S 架构。 * 所以需要保证单机版本和 C/S 架构版本的模式是一样的。也就是说,在单机模式下, * 在通过门户访问时,模拟网络版,clone 出一个新的对象。 * 这样,在底层 Update 更改 obj 时,不会影响上层的实体。 * 而是以返回值的形式把这个被修改的实体返回给上层。 * * 20120828 * 但是,当在服务端本地调用时,不需要此模拟功能。 * 这是因为在服务端本地调用时(例如服务端本地调用 RF.Save), * 在开发体验上,数据层和上层使用的实体应该是同一个,数据层的修改应该能够带回到上层,不需要克隆。 * **********************************************************************/ try { RafyEnvironment.ThreadPortalCount++; //ThreadPortalCount == 1 表示第一次进入数据门户 if (FakeRemoteIfOnClient && RafyEnvironment.Location.IsWPFUI && RafyEnvironment.Location.ConnectDataDirectly && RafyEnvironment.ThreadPortalCount == 1) { res = ObjectCloner.Clone(obj); } else { res = obj; } FinalDataPortal.Update(res); } finally { RafyEnvironment.ThreadPortalCount--; } } else { var proxy = GetDataPortalProxy(); var dpContext = CreateDataPortalContext(); var result = proxy.Update(obj, dpContext); res = ReadServerResult(result); } return(res); }
public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic) { var proxy = GetDataPortalProxy(loc); var dpContext = new Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote); var result = proxy.Update(obj, dpContext); if (proxy.IsServerRemote) DistributionContext.SetGlobalContext(result.GlobalContext); return result.ReturnObject; }
private static IDataPortalProxy GetDataPortalProxy(DataPortalLocation loc) { if (loc == DataPortalLocation.Local) return new LocalProxy(); if (_proxyType == null) { string proxyTypeName = DistributionContext.DataPortalProxy; if (proxyTypeName == "Local") return new LocalProxy(); _proxyType = Type.GetType(proxyTypeName, true, true); } return Activator.CreateInstance(_proxyType) as IDataPortalProxy; }
public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic) { var proxy = GetDataPortalProxy(loc); var dpContext = new Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote); var result = proxy.Update(obj, dpContext); if (proxy.IsServerRemote) { DistributionContext.SetGlobalContext(result.GlobalContext); } return(result.ReturnObject); }
public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic) { var proxy = GetDataPortalProxy(loc); var dpContext = new Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote); Server.DataPortalResult result = null; try { result = proxy.Fetch(objectType, criteria, dpContext); } finally { if (proxy.IsServerRemote && result != null) { DistributionContext.SetGlobalContext(result.GlobalContext); } } //不能等于 ReturnObject=null return result.ReturnObject; }
private static IDataPortalProxy GetDataPortalProxy(DataPortalLocation loc) { if (loc == DataPortalLocation.Local) { return(new LocalProxy()); } if (_proxyType == null) { string proxyTypeName = DistributionContext.DataPortalProxy; if (proxyTypeName == "Local") { return(new LocalProxy()); } _proxyType = Type.GetType(proxyTypeName, true, true); } return(Activator.CreateInstance(_proxyType) as IDataPortalProxy); }
/// <summary> /// 使用门户查询 /// </summary> /// <param name="objectType"></param> /// <param name="criteria"></param> /// <param name="loc">如果一个数据层方法需要在本地执行,应该在把本参数指明为 Local。</param> /// <returns></returns> public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic) { object res = null; ////只是不要纯客户端,都直接使用本地访问 //if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly) //{ // res = FinalDataPortal.Fetch(objectType, criteria); //} //else //{ var proxy = GetDataPortalProxy(); var dpContext = CreateDataPortalContext(); var result = proxy.Fetch(objectType, criteria, dpContext); res = ReadServerResult(result); //} return(res); }
public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic) { var proxy = GetDataPortalProxy(loc); var dpContext = new Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote); Server.DataPortalResult result = null; try { result = proxy.Fetch(objectType, criteria, dpContext); } finally { if (proxy.IsServerRemote && result != null) { DistributionContext.SetGlobalContext(result.GlobalContext); } } //不能等于 ReturnObject=null return(result.ReturnObject); }
public DomainService() { this._dataPortalLocation = LEnvironment.IsOnServer() ? DataPortalLocation.Local : DataPortalLocation.Local; }
public Service() { this._dataPortalLocation = RafyEnvironment.IsOnServer() ? DataPortalLocation.Local : DataPortalLocation.Dynamic; }
/// <summary> /// Called by the business object's Save() method to /// insert, update or delete an object in the database. /// </summary> /// <param name="obj">A reference to the business object to be updated.</param> /// <param name="loc">The loc.</param> /// <returns> /// A reference to the updated business object. /// </returns> /// <remarks> /// Note that this method returns a reference to the updated business object. /// If the server-side DataPortal is running remotely, this will be a new and /// different object from the original, and all object references MUST be updated /// to use this new object. /// </remarks> public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic) { try { RafyEnvironment.ThreadPortalCount++; object res = null; //只是不要纯客户端,都直接使用本地访问 if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly) { /*********************** 代码块解释 ********************************* * * 由于开发人员平时会使用单机版本开发,而正式部署时,又会选用 C/S 架构。 * 所以需要保证单机版本和 C/S 架构版本的模式是一样的。也就是说,在单机模式下, * 在通过门户访问时,模拟网络版,clone 出一个新的对象。 * 这样,在底层 Update 更改 obj 时,不会影响上层的实体。 * 而是以返回值的形式把这个被修改的实体返回给上层。 * * 20120828 * 但是,当在服务端本地调用时,不需要此模拟功能。 * 这是因为在服务端本地调用时(例如服务端本地调用 RF.Save), * 在开发体验上,数据层和上层使用的实体应该是同一个,数据层的修改应该能够带回到上层,不需要克隆。 * **********************************************************************/ //ThreadPortalCount == 1 表示第一次进入数据门户 if (RafyEnvironment.Location.IsWPFUI && RafyEnvironment.Location.ConnectDataDirectly && RafyEnvironment.ThreadPortalCount == 1) { res = ObjectCloner.Clone(obj); } else { res = obj; } FinalDataPortal.Update(res); } else { var proxy = GetDataPortalProxy(); var dpContext = CreateDataPortalContext(); var result = proxy.Update(obj, dpContext); res = ReadServerResult(result); } return res; } finally { RafyEnvironment.ThreadPortalCount--; } }