public void TestBatchUpdate() { DbTransaction tran = gateway.BeginTransaction(); gateway.Update <OrderDetailsExtended>(new PropertyItem[] { OrderDetailsExtended._.UnitPrice }, new object[] { 100 }, OrderDetailsExtended._.UnitPrice == 100, tran); tran.Commit(); gateway.CloseTransaction(tran); gateway.Update <OrderDetailsExtended>(new PropertyItem[] { OrderDetailsExtended._.UnitPrice }, new object[] { OrderDetailsExtended._.ExtendedPrice }, OrderDetailsExtended._.UnitPrice == 100); gateway.Update <OrderDetailsExtended>(new PropertyItem[] { OrderDetailsExtended._.UnitPrice }, new object[] { new PropertyItemParam("{ExtendedPrice} + {ExtendedPrice} + 100") }, OrderDetailsExtended._.UnitPrice == 100); }
protected override int ExecuteInsert(IDictionary values) { Gateway gateway = owner.Gateway; Type type = Util.GetType(this.owner.TypeName); object entity = Activator.CreateInstance(type); foreach (string key in values.Keys) { PropertyInfo property = Util.DeepGetProperty(type, key); if (property.CanWrite) { property.SetValue(entity, ChangeType(values[key], property.PropertyType), null); } } NBearDataSourceEventArgs savingArgs = new NBearDataSourceEventArgs(entity); owner.OnSaving(savingArgs); entity = savingArgs.Entity; if (entity == null) { return(0); } System.Data.Common.DbTransaction tran = null; try { tran = gateway.BeginTransaction(); MethodInfo miSave = GetGatewayMethodInfo("Int32 Save[EntityType](EntityType, System.Data.Common.DbTransaction)"); miSave.MakeGenericMethod(type).Invoke(gateway, new object[] { entity, tran }); tran.Commit(); } catch { tran.Rollback(); throw; } finally { gateway.CloseTransaction(tran); } owner.OnSaved(new NBearDataSourceEventArgs(entity)); this.OnDataSourceViewChanged(EventArgs.Empty); return(1); }
public void TestAsp11Transaction() { Guid id = default(Guid); DbTransaction tran = gateway.BeginTransaction(); try { id = CreateSampleData(tran); tran.Commit(); } catch { tran.Rollback(); throw; } finally { gateway.CloseTransaction(tran); } AgentUser user = gateway.Find <AgentUser>(id); Assert.AreNotEqual(user.Profile, null); user.Status = UserStatus.Deleted; user.Profile.ContentXml = "modified"; gateway.Save <AgentUser>(user); AgentUser anotherThisUser = gateway.Find <AgentUser>(user.ID); Assert.AreEqual(anotherThisUser.Status, user.Status); Assert.AreEqual(anotherThisUser.Profile.ContentXml, user.Profile.ContentXml); gateway.Delete <User>(user); Assert.IsNull(gateway.Find <LocalUser>(id)); Assert.IsNull(gateway.Find <UserProfile>(id)); }
/// <summary> /// 保存卡数据集合代理商 /// </summary> /// <param name="tB_DATA_CARD_LIST"></param> /// <returns></returns> public int SaveImportCardForAgent(List <TB_DATA_CARD> tB_DATA_CARD_LIST) { Gateway gateway = Gateway.Default; DbTransaction tran = gateway.BeginTransaction(); try { //取所有非删除的终端用户 String endCustomSql = "select END_CUSTOMER_ID,END_CUSTOMER_NAME FROM [dbo].[TB_DATA_END_CUSTOMER] WHERE STATUS>-1"; DataTable endCustomData = gateway.FromCustomSql(endCustomSql).ToDataSet().Tables[0]; for (int i = 0; i < tB_DATA_CARD_LIST.Count; i++) { TB_DATA_CARD tB_DATA_CARD = tB_DATA_CARD_LIST[i]; String cardID = gateway.Find <TB_DATA_CARD>(TB_DATA_CARD._.CARD_ICCID == tB_DATA_CARD.CARD_ICCID || TB_DATA_CARD._.CARD_NO == tB_DATA_CARD.CARD_NO).CARD_ID; if (!String.IsNullOrEmpty(cardID)) { String end_customer_id = String.Empty; if (!String.IsNullOrEmpty(tB_DATA_CARD.END_CUSTOMER_ID.Trim())) { end_customer_id = endCustomData.Select().Where(s => s["END_CUSTOMER_NAME"].ToString() == tB_DATA_CARD.END_CUSTOMER_ID.Trim()).Select(s => s["END_CUSTOMER_ID"].ToString()).FirstOrDefault(); if (String.IsNullOrEmpty(end_customer_id)) { TB_DATA_END_CUSTOMER tB_DATA_END_CUSTOMER = new TB_DATA_END_CUSTOMER(); end_customer_id = Guid.NewGuid().ToString(); tB_DATA_END_CUSTOMER.END_CUSTOMER_ID = end_customer_id; tB_DATA_END_CUSTOMER.END_CUSTOMER_NAME = tB_DATA_CARD.END_CUSTOMER_ID.Trim(); tB_DATA_END_CUSTOMER.STATUS = 1; tB_DATA_END_CUSTOMER.CREATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_END_CUSTOMER.CREATED_TIME = DateTime.Now; tB_DATA_END_CUSTOMER.LAST_UPDATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_END_CUSTOMER.LAST_UPDATED_TIME = DateTime.Now; gateway.Save <TB_DATA_END_CUSTOMER>(tB_DATA_END_CUSTOMER, tran); } tB_DATA_CARD.END_CUSTOMER_ID = end_customer_id; } tB_DATA_CARD.Attach(); tB_DATA_CARD.SetModifiedProperties(new Dictionary <string, object> { { "END_CUSTOMER_ID", tB_DATA_CARD.END_CUSTOMER_ID }, { "STATUS", tB_DATA_CARD.STATUS }, { "SERVICE_PROVIDER", tB_DATA_CARD.SERVICE_PROVIDER }, { "REAL_NAME_PERSON", tB_DATA_CARD.REAL_NAME_PERSON }, { "REAL_NAME_ID_CARD", tB_DATA_CARD.REAL_NAME_ID_CARD }, { "LAST_UPDATED_BY", tB_DATA_CARD.LAST_UPDATED_BY }, { "LAST_UPDATED_TIME", tB_DATA_CARD.LAST_UPDATED_TIME } }); } gateway.Save <TB_DATA_CARD>(tB_DATA_CARD, tran); } tran.Commit(); return(1); } catch (Exception ex) { tran.Rollback(); Log.WriteLog(ex.Message); return(0); } finally { gateway.CloseTransaction(tran); tran.Dispose(); } }
/// <summary> /// 保存卡数据集合管理员 /// </summary> /// <param name="tB_DATA_CARD_LIST"></param> /// <returns></returns> public int SaveImportCardForAdmin(List <TB_DATA_CARD> tB_DATA_CARD_LIST) { Gateway gateway = Gateway.Default; DbTransaction tran = gateway.BeginTransaction(); try { //取所有非删除的代理商 String agentSql = "SELECT [AGENT_ID],[AGENT_NAME] FROM [dbo].[TB_DATA_AGENT] WHERE STATUS>-1"; DataTable agentData = gateway.FromCustomSql(agentSql).SetTransaction(tran).ToDataSet().Tables[0]; //取所有非删除的终端用户 String endCustomSql = "select END_CUSTOMER_ID,END_CUSTOMER_NAME FROM [dbo].[TB_DATA_END_CUSTOMER] WHERE STATUS>-1"; DataTable endCustomData = gateway.FromCustomSql(endCustomSql).SetTransaction(tran).ToDataSet().Tables[0]; //取所有非删除的品牌信息 String brandSql = "select BRAND_ID,BRAND_NAME FROM [dbo].[TB_DATA_BRAND]"; DataTable brandData = gateway.FromCustomSql(brandSql).SetTransaction(tran).ToDataSet().Tables[0]; //循环添加卡信息 for (int i = 0; i < tB_DATA_CARD_LIST.Count; i++) { TB_DATA_CARD tB_DATA_CARD = tB_DATA_CARD_LIST[i]; String agent_id = String.Empty, end_customer_id = String.Empty, brand_id = String.Empty; //获取导入的代理商 终端客户 品牌信息字段对应的ID,不存在就创建对应的信息 if (!String.IsNullOrEmpty(tB_DATA_CARD.AGENT_ID.Trim())) { agent_id = agentData.Select().Where(s => s["AGENT_NAME"].ToString() == tB_DATA_CARD.AGENT_ID.Trim()).Select(s => s["AGENT_ID"].ToString()).FirstOrDefault(); if (String.IsNullOrEmpty(agent_id)) { TB_DATA_AGENT tB_DATA_AGENT = new TB_DATA_AGENT(); agent_id = Guid.NewGuid().ToString(); tB_DATA_AGENT.AGENT_ID = agent_id; tB_DATA_AGENT.AGENT_NAME = tB_DATA_CARD.AGENT_ID.Trim(); tB_DATA_AGENT.STATUS = 1; tB_DATA_AGENT.CREATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_AGENT.CREATED_TIME = DateTime.Now; tB_DATA_AGENT.LAST_UPDATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_AGENT.LAST_UPDATED_TIME = DateTime.Now; gateway.Save <TB_DATA_AGENT>(tB_DATA_AGENT, tran); } tB_DATA_CARD.AGENT_ID = agent_id; } if (!String.IsNullOrEmpty(tB_DATA_CARD.END_CUSTOMER_ID.Trim())) { end_customer_id = endCustomData.Select().Where(s => s["END_CUSTOMER_NAME"].ToString() == tB_DATA_CARD.END_CUSTOMER_ID.Trim()).Select(s => s["END_CUSTOMER_ID"].ToString()).FirstOrDefault(); if (String.IsNullOrEmpty(end_customer_id)) { TB_DATA_END_CUSTOMER tB_DATA_END_CUSTOMER = new TB_DATA_END_CUSTOMER(); end_customer_id = Guid.NewGuid().ToString(); tB_DATA_END_CUSTOMER.END_CUSTOMER_ID = end_customer_id; tB_DATA_END_CUSTOMER.END_CUSTOMER_NAME = tB_DATA_CARD.END_CUSTOMER_ID.Trim(); tB_DATA_END_CUSTOMER.STATUS = 1; tB_DATA_END_CUSTOMER.CREATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_END_CUSTOMER.CREATED_TIME = DateTime.Now; tB_DATA_END_CUSTOMER.LAST_UPDATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_END_CUSTOMER.LAST_UPDATED_TIME = DateTime.Now; gateway.Save <TB_DATA_END_CUSTOMER>(tB_DATA_END_CUSTOMER, tran); } tB_DATA_CARD.END_CUSTOMER_ID = end_customer_id; } if (!String.IsNullOrEmpty(tB_DATA_CARD.BRAND_ID.Trim())) { brand_id = brandData.Select().Where(s => s["BRAND_NAME"].ToString() == tB_DATA_CARD.BRAND_ID.Trim()).Select(s => s["BRAND_ID"].ToString()).FirstOrDefault(); if (String.IsNullOrEmpty(brand_id)) { TB_DATA_BRAND tB_DATA_BRAND = new TB_DATA_BRAND(); brand_id = Guid.NewGuid().ToString(); tB_DATA_BRAND.BRAND_ID = brand_id; tB_DATA_BRAND.BRAND_NAME = tB_DATA_CARD.BRAND_ID.Trim(); tB_DATA_BRAND.CREATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_BRAND.CREATED_TIME = DateTime.Now; tB_DATA_BRAND.LAST_UPDATED_BY = tB_DATA_CARD.CREATED_BY; tB_DATA_BRAND.LAST_UPDATED_TIME = DateTime.Now; gateway.Save <TB_DATA_BRAND>(tB_DATA_BRAND, tran); } tB_DATA_CARD.BRAND_ID = brand_id; } String cardID = gateway.Find <TB_DATA_CARD>(TB_DATA_CARD._.CARD_ICCID == tB_DATA_CARD.CARD_ICCID || TB_DATA_CARD._.CARD_NO == tB_DATA_CARD.CARD_NO).CARD_ID; if (!String.IsNullOrEmpty(cardID)) { tB_DATA_CARD.Attach(); tB_DATA_CARD.SetAllPropertiesAsModified(); } gateway.Save <TB_DATA_CARD>(tB_DATA_CARD, tran); } String updateSql = @"update TB_DATA_AGENT set AGENT_CARD_NUMBER=T.card_count from ( select count(1) card_count,AGENT_ID from TB_DATA_CARD GROUP BY AGENT_ID ) T where TB_DATA_AGENT.AGENT_ID=T.AGENT_ID"; gateway.FromCustomSql(updateSql).SetTransaction(tran).ExecuteNonQuery(); tran.Commit(); return(1); } catch (Exception ex) { tran.Rollback(); Log.WriteLog(ex.Message); return(0); } finally { gateway.CloseTransaction(tran); tran.Dispose(); } }
protected override int ExecuteDelete(IDictionary keys, IDictionary oldValues) { Gateway gateway = owner.Gateway; Type type = Util.GetType(this.owner.TypeName); string keyMember = null; Type keyType = null; object keyValue = null; PropertyInfo keyMemberProperty = null; List <string> keyNames = new List <string>(); List <object> keyValues = new List <object>(); if (keys != null && keys.Count > 0) { IEnumerator en = keys.Keys.GetEnumerator(); while (en.MoveNext()) { keyMember = en.Current.ToString(); keyNames.Add(keyMember); keyMemberProperty = Util.DeepGetProperty(type, keyMember); keyValue = ChangeType(keys[keyMember], keyMemberProperty.PropertyType); keyValues.Add(keyValue); } } else { EntityConfiguration ec = MetaDataManager.GetEntityConfiguration(this.owner.TypeName); foreach (PropertyConfiguration pc in ec.Properties) { if (pc.IsPrimaryKey) { keyMember = pc.Name; keyNames.Add(keyMember); keyType = Util.GetType(pc.PropertyType); keyValue = ChangeType(oldValues[keyMember], keyType); keyValues.Add(keyValue); } } } MethodInfo miFind = GetGatewayMethodInfo("EntityType Find[EntityType](System.Object[])"); object entity = miFind.MakeGenericMethod(type).Invoke(gateway, new object[] { keyValues.ToArray() }); if (entity == null) { return(0); } //check DBConcurrency if (this.owner.ConflictDetection == ConflictOptions.CompareAllValues) { foreach (string key in oldValues.Keys) { if (keyNames.Contains(key)) { continue; } PropertyInfo property = Util.DeepGetProperty(type, key); if (property != null && property.GetValue(entity, null) != ChangeType(oldValues[key], property.PropertyType)) { throw new System.Data.DBConcurrencyException("The underlying data has changed."); } } } NBearDataSourceEventArgs deletingArgs = new NBearDataSourceEventArgs(entity); owner.OnDeleting(deletingArgs); entity = deletingArgs.Entity; if (entity == null) { return(0); } System.Data.Common.DbTransaction tran = null; try { tran = gateway.BeginTransaction(); MethodInfo miDelete = GetGatewayMethodInfo("Void Delete[EntityType](EntityType, System.Data.Common.DbTransaction)"); miDelete.MakeGenericMethod(type).Invoke(gateway, new object[] { entity, tran }); tran.Commit(); } catch { tran.Rollback(); throw; } finally { gateway.CloseTransaction(tran); } owner.OnDeleted(new NBearDataSourceEventArgs(entity)); this.OnDataSourceViewChanged(EventArgs.Empty); return(1); }
protected override int ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) { Gateway gateway = owner.Gateway; Type type = Util.GetType(this.owner.TypeName); string keyMember = null; Type keyType = null; object keyValue = null; PropertyInfo keyMemberProperty = null; List <string> keyNames = new List <string>(); Entity entity = (Entity)Activator.CreateInstance(type); if (keys != null && keys.Count > 0) { IEnumerator en = keys.Keys.GetEnumerator(); while (en.MoveNext()) { keyMember = en.Current.ToString(); keyNames.Add(keyMember); keyMemberProperty = Util.DeepGetProperty(type, keyMember); keyValue = ChangeType(keys[keyMember], keyMemberProperty.PropertyType); keyMemberProperty.SetValue(entity, keyValue, null); } } else { EntityConfiguration ec = MetaDataManager.GetEntityConfiguration(this.owner.TypeName); foreach (PropertyConfiguration pc in ec.Properties) { if (pc.IsPrimaryKey) { keyMember = pc.Name; keyNames.Add(keyMember); keyType = Util.GetType(pc.PropertyType); keyValue = ChangeType(oldValues[keyMember], keyType); keyMemberProperty = Util.DeepGetProperty(type, keyMember); keyMemberProperty.SetValue(entity, keyValue, null); } } } bool changed = false; entity.Attach(); foreach (string key in values.Keys) { if (keyNames.Contains(key)) { continue; } PropertyInfo property = Util.DeepGetProperty(type, key); if (this.owner.ConflictDetection == ConflictOptions.CompareAllValues) { if (property != null && property.GetValue(entity, null) != ChangeType(oldValues[key], property.PropertyType)) { throw new System.Data.DBConcurrencyException("The underlying data has changed."); } } if (values[key] == oldValues[key]) { continue; } if (property != null && property.CanWrite) { changed = true; property.SetValue(entity, ChangeType(values[key], property.PropertyType), null); } } if (changed) { NBearDataSourceEventArgs savingArgs = new NBearDataSourceEventArgs(entity); owner.OnSaving(savingArgs); entity = (Entity)savingArgs.Entity; if (entity == null) { return(0); } System.Data.Common.DbTransaction tran = null; try { tran = gateway.BeginTransaction(); MethodInfo miSave = GetGatewayMethodInfo("Int32 Save[EntityType](EntityType, System.Data.Common.DbTransaction)"); miSave.MakeGenericMethod(type).Invoke(gateway, new object[] { entity, tran }); tran.Commit(); } catch { tran.Rollback(); throw; } finally { gateway.CloseTransaction(tran); } owner.OnSaved(new NBearDataSourceEventArgs(entity)); this.OnDataSourceViewChanged(EventArgs.Empty); } return(changed ? 1 : 0); }