Update / Insert multiple rows using jQuery and OData (WCF Data Services)

I have three tables: Template, Fields and TemplateFields. TemplateFields contains the selected fields for each template. I need to update TemplateFields when the user completes the selection of fields. The only way I can do this is to remove all the TemplateFields for this template and then add them one by one to the individual queries. This is really bad, because the deal does not have to be returned, and there will also be MANY requests.

Is there a way to add multiple “objects” at once using WCF data services? Then I can use Interceptor to update the database.

+4
source share
1 answer

See the article " Adding / Creating Data to the OData / Wcf Batch Data Service. ":

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

Update:

Article moved to:
http://www.fcodings.com/2010/06/18/addingcreating-data-to-odatawcf-data-service-batch-explained/

Quote from the post as requested in the comments

  • Service

    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); } } } 
  • Client

     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(); } } } 

In the following example, the most important part of the client code:

 _context.SaveChanges(SaveChangesOptions.Batch); 
+1
source

Source: https://habr.com/ru/post/1309914/


All Articles