Обновление / вставка нескольких строк с использованием jQuery и OData (службы данных WCF) - PullRequest
4 голосов
/ 16 мая 2010

У меня есть три таблицы: Template, Fields и TemplateFields. TemplateFields содержит выбранные поля для каждого шаблона. Мне нужно обновить TemplateFields, когда пользователь закончит выбор полей. Единственный способ сделать это - удалить все TemplateFields для этого шаблона, а затем добавить их один за другим в отдельных запросах. Это действительно плохо, потому что нет транзакции, к которой можно вернуться, и также будет МНОГИЕ запросы.

Есть ли способ добавить несколько «объектов» одновременно с помощью WCF Data Services? Затем я могу использовать Перехватчик для обновления базы данных.

1 Ответ

1 голос
/ 21 сентября 2010

См. Эту статью " Добавление / создание данных в OData / Wcf Data Service, пакетная обработка ":

http://franssenden.wordpress.com/2010/06/18/addingcreating-data-to-odatawcf-data-service-batch-explained/

Обновление:

Статья перемещена в:
http://www.fcodings.com/2010/06/18/addingcreating-data-to-odatawcf-data-service-batch-explained/

Цитирование из поста согласно запросу в комментариях

  1. Услуга

    using System.Collections.Generic;
    using System.Data.Services;
    using System.Linq;
    using System.ServiceModel.Web;
    using System.Web;
    using System.Linq.Expressions;
    using System.Data.Services.Common;
    
    namespace TestAdventureWorksDataServices
    {
        public class AdventureService : DataService<AdventureWorksEntities>
        {
            // This method is called only once to initialize service-wide policies.
            public static void InitializeService(DataServiceConfiguration config)
            {
                // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
                // Examples:
                config.SetEntitySetAccessRule("*", EntitySetRights.All);
                // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
                config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
                config.UseVerboseErrors = false;
            }
    
            protected override void HandleException(HandleExceptionArgs args)
            {
                throw new DataServiceException(args.Exception.InnerException.Message, args.Exception);
            }
    
        }
    }
    
  2. Клиент

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Services.Client;
    
    namespace Client
    {
        using Client.AdventureWorksServiceReference;
    
        class Program
        {
            private static AdventureWorksEntities _context = null;
    
            static void Main(string[] args)
            {
                _context = new AdventureWorksEntities(new Uri("http://ipv4.fiddler:51824/AdventureService.svc"));
    
                var product1 = Product.CreateProduct(0, "My Test Product 1", "1234", true, true, 1, 1, 100, 200, 3,
                DateTime.Now, new Guid("E29C16AE-908A-4F53-8E19-DC2CFDDF08A0"), DateTime.Now);
    
                var product2 = Product.CreateProduct(0, "My Test Product 2", "5678", true, true, 1, 1, 200, 300, 3,
                DateTime.Now, new Guid("1B9689D6-CCFF-40C3-AA0F-1AC3C5951738"), DateTime.Now);
    
                var product3 = Product.CreateProduct(0, "My Test Product 3", "9876", true, true, 1, 1, 300, 400, 3,
                DateTime.Now, new Guid("{0B677FB4-890E-4FAF-AD6A-7477D5703E6E}"), DateTime.Now);
    
                var collection = new DataServiceCollection<Product>(_context);
                collection.Add(product1);
                collection.Add(product2);
                collection.Add(product3);
                _context.SaveChanges();
    
                Console.Read();
    
                //remove products to omit unique constraint next time running this app:
                collection.Remove(product1);
                collection.Remove(product2);
                collection.Remove(product3);
                _context.SaveChanges(SaveChangesOptions.Batch);
    
                Console.WriteLine("Deleted. Sorry, changed my mind!");
                Console.Read();
    
            }
        }
    }
    

Где следующее является наиболее важной частью в коде клиента:

_context.SaveChanges(SaveChangesOptions.Batch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...