我有三个表格,Template,Fields和TemplateFields。 TemplateFields保存每个模板的选定字段。 我需要在用户完成选择字段时更新TemplateFields。我能看到做到这一点的唯一方法是删除该模板的所有TemplateField,然后在不同的请求中逐个添加它们。这非常糟糕,因为没有交易回落,并且还会有很多请求。使用jQuery和OData更新/插入多行(WCF数据服务)
有没有使用WCF数据服务一次添加多个'对象'的方法?然后我可以使用拦截器来更新数据库。
我有三个表格,Template,Fields和TemplateFields。 TemplateFields保存每个模板的选定字段。 我需要在用户完成选择字段时更新TemplateFields。我能看到做到这一点的唯一方法是删除该模板的所有TemplateField,然后在不同的请求中逐个添加它们。这非常糟糕,因为没有交易回落,并且还会有很多请求。使用jQuery和OData更新/插入多行(WCF数据服务)
有没有使用WCF数据服务一次添加多个'对象'的方法?然后我可以使用拦截器来更新数据库。
请参阅本文 “添加/创建数据的OData/WCF数据服务批解释”:
更新:
文章已经转移到:
http://www.fcodings.com/2010/06/18/addingcreating-data-to-odatawcf-data-service-batch-explained/
从后报价为每个请求的评论
服务
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);
}
}
}
客户
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);
感谢您花时间回答这个问题。然而,我的问题是使用JavaScrtipt来完成......最好是jQuery(我忘了在问题中提到:s)。 – Pieter 2010-09-21 12:26:47