예제 #1
0
        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));
            }
        }
예제 #2
0
        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);
            }
        }