private void button1_Click(object sender, EventArgs e) { listBox1.Items.Clear(); //EntityState.Added foreach (var entry in context.ObjectStateManager .GetObjectStateEntries(EntityState.Added)) { string NewEmplNo, NewEmplName; NewEmplNo = ((Transfer)(entry.Entity)).TransferID; NewEmplName = ((Transfer)(entry.Entity)).Description; listBox1.Items.Add(String.Format( "員工代碼{0}為Added,目前的員工名稱:{1} ", NewEmplNo, NewEmplName)); } //EntityState.Modified foreach (var entry in context.ObjectStateManager .GetObjectStateEntries(EntityState.Modified)) { string NewEmplName, OldEmplName, OrginalEmplNo; //取得員工名稱目前值 CurrentValueRecord curr = entry.CurrentValues; NewEmplName = (string)(curr.GetValue(curr.GetOrdinal("Description"))); //取得員工名稱原來值 OriginalValueRecord org = entry.GetUpdatableOriginalValues(); OldEmplName = (string)(org.GetValue(org.GetOrdinal("Description"))); OrginalEmplNo = ((Transfer)(entry.Entity)).TransferID; listBox1.Items.Add(String.Format("員工代碼{0}為Modified, " + "目前的員工名稱:{1},原來的員工名稱:{2} ", OrginalEmplNo, NewEmplName, OldEmplName)); } //EntityState.Deleted foreach (var entry in context.ObjectStateManager .GetObjectStateEntries(EntityState.Deleted)) { string OldEmplNo, OldEmplName; OldEmplNo = ((Transfer)(entry.Entity)).TransferID; OldEmplName = ((Transfer)(entry.Entity)).Description; listBox1.Items.Add(String.Format("員工代碼{0}為Deleted, " + "原來的員工名稱:{1} ", OldEmplNo, OldEmplName)); } //EntityState.Unchanged foreach (var entry in context.ObjectStateManager .GetObjectStateEntries(EntityState.Unchanged)) { string currEmplNo, currEmplName; currEmplNo = ((Transfer)(entry.Entity)).TransferID; currEmplName = ((Transfer)(entry.Entity)).Description; listBox1.Items.Add(String.Format("員工代碼{0}為Unchanged, " + "目前的員工名稱:{1} ", currEmplNo, currEmplName)); } }
private static void PopulateComplexType(OriginalValueRecord originalValues, string propertyName, object originalValue, ComplexType complexType) { var ordinal = originalValues.GetOrdinal(propertyName); originalValues = (OriginalValueRecord)originalValues.GetValue(ordinal); foreach (var cp in complexType.Properties) { var value = Server.Helper.GetMemberValue(originalValue, cp.Name); if (cp.TypeUsage.EdmType is ComplexType loopComplexType) { PopulateComplexType(originalValues, cp.Name, value, loopComplexType); } else { var loopOrdinal = originalValues.GetOrdinal(cp.Name); originalValues.SetValue(loopOrdinal, value); } } }
void IDataServiceUpdateProvider.SetConcurrencyValues(object resourceCookie, bool?checkForEquality, IEnumerable <KeyValuePair <string, object> > concurrencyValues) { if (checkForEquality == null) { throw new DataServiceException(500, "Cannot perform operation without ETag."); } if (!checkForEquality.Value) { throw new DataServiceException(500, "IfNoneMatch header not supported in update and delete."); } ObjectStateEntry objectStateEntry = CurrentDataSource.ObjectContext.ObjectStateManager.GetObjectStateEntry(resourceCookie); OriginalValueRecord originalValues = objectStateEntry.GetUpdatableOriginalValues(); foreach (KeyValuePair <string, object> etag in concurrencyValues) { int propertyOrdinal = originalValues.GetOrdinal(etag.Key); originalValues.SetValue(propertyOrdinal, etag.Value); } }