Esempio n. 1
0
        // Populates a contract description from a domain service description.
        public static void LoadContractDescription(ContractDescription contractDesc, DomainServiceDescription domainServiceDescription)
        {
            bool isMutable = false;
            OperationDescription operationDesc;

            Type queryOperationType;
            Dictionary <Type, Type> queryOperationTypes = new Dictionary <Type, Type>();

            foreach (DomainOperationEntry operation in domainServiceDescription.DomainOperationEntries)
            {
                switch (operation.Operation)
                {
                case DomainOperation.Insert:
                case DomainOperation.Update:
                case DomainOperation.Custom:
                case DomainOperation.Delete:
                    isMutable = true;
                    break;

                case DomainOperation.Query:
                    operationDesc = ServiceUtility.CreateQueryOperationDescription(contractDesc, operation);

                    if (!queryOperationTypes.TryGetValue(operation.AssociatedType, out queryOperationType))
                    {
                        queryOperationType = typeof(QueryOperationBehavior <>).MakeGenericType(operation.AssociatedType);
                        queryOperationTypes.Add(operation.AssociatedType, queryOperationType);
                    }

                    operationDesc.Behaviors.Add((IOperationBehavior)Activator.CreateInstance(queryOperationType, operation));
                    contractDesc.Operations.Add(operationDesc);
                    break;

                case DomainOperation.Invoke:
                    operationDesc = ServiceUtility.CreateOperationDescription(contractDesc, operation);

                    operationDesc.Behaviors.Add(new InvokeOperationBehavior(operation));
                    contractDesc.Operations.Add(operationDesc);
                    break;
                }
            }

            if (isMutable)
            {
                // Add a SubmitChanges operation.
                operationDesc = ServiceUtility.CreateSubmitOperationDescription(contractDesc, domainServiceDescription);

                operationDesc.Behaviors.Add(new SubmitOperationBehavior());
                contractDesc.Operations.Add(operationDesc);
            }

            ServiceUtility.RegisterSurrogates(contractDesc, domainServiceDescription);
        }