使用 jQuery 和 OData(WCF 数据服务)更新/插入多行

发布于 2024-09-01 09:14:33 字数 238 浏览 7 评论 0原文

我有三个表:Template、Fields 和 TemplateFields。 TemplateFields 保存每个模板的选定字段。 当用户完成选择字段时,我需要更新 TemplateFields。我能想到的唯一方法是删除该模板的所有 TemplateField,然后在单独的请求中将它们一一添加。这真的很糟糕,因为没有事务可以回退,而且还会有很多请求。

有没有办法使用 WCF 数据服务一次添加多个“对象”?然后我可以使用拦截器来更新数据库。

I have three tables, Template, Fields and TemplateFields. TemplateFields holds the selected fields for each template.
I need to update TemplateFields when the user is finished selecting the fields. The only way I can see to do this is by deleting all the TemplateFields for that Template and then add them one by one in separate requests. This is really bad because there is not transaction to fall back onto and there will also be MANY requests.

Is there a way of adding multiple 'objects' at once using WCF Data Services? I can then use an Interceptor to update the database.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

入画浅相思 2024-09-08 09:14:33

请参阅这篇文章“向 OData/Wcf 数据服务批量添加/创建数据说明”:

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. 服务

    使用 System.Collections.Generic;
    使用系统.数据.服务;
    使用 System.Linq;
    使用 System.ServiceModel.Web;
    使用系统.Web;
    使用 System.Linq.Expressions;
    使用 System.Data.Services.Common;
    
    命名空间 TestAdventureWorksDataServices
    {
        公共类 AdventureService :DataService
        {
            // 该方法仅调用一次来初始化服务范围的策略。
            公共静态无效InitializeService(DataServiceConfiguration配置)
            {
                // TODO:设置规则来指示哪些实体集和服务操作是可见的、可更新的等。
                // 示例:
                config.SetEntitySetAccessRule("*", EntitySetRights.All);
                // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
                config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
                config.UseVerboseErrors = false;
            }
    
            受保护的重写 void HandleException(HandleExceptionArgs args)
            {
                抛出新的 DataServiceException(args.Exception.InnerException.Message, args.Exception);
            }
    
        }
    }
    
  2. 客户端

    使用系统;
    使用 System.Collections.Generic;
    使用 System.Linq;
    使用系统文本;
    使用 System.Data.Services.Client;
    
    命名空间客户端
    {
        使用 Client.AdventureWorksServiceReference;
    
        班级计划
        {
            私有静态 AdventureWorksEntities _context = null;
    
            静态无效主(字符串[]参数)
            {
                _context = new AdventureWorksEntities(new Uri("http://ipv4.fiddler:51824/AdventureService.svc"));
    
                var Product1 = Product.CreateProduct(0, "我的测试产品 1", "1234", true, true, 1, 1, 100, 200, 3,
                DateTime.Now,新 Guid("E29C16AE-908A-4F53-8E19-DC2CFDDF08A0"),DateTime.Now);
    
                var Product2 = Product.CreateProduct(0, "我的测试产品 2", "5678", true, true, 1, 1, 200, 300, 3,
                DateTime.Now,新 Guid("1B9689D6-CCFF-40C3-AA0F-1AC3C5951738"),DateTime.Now);
    
                var Product3 = Product.CreateProduct(0, "我的测试产品 3", "9876", true, true, 1, 1, 300, 400, 3,
                DateTime.Now, new Guid("{0B677FB4-890E-4FAF-AD6A-7477D5703E6E}"), DateTime.Now);
    
                var collection = new DataServiceCollection(_context);
                集合.添加(产品1);
                集合.添加(产品2);
                集合.添加(产品3);
                _context.SaveChanges();
    
                控制台.Read();
    
                // 下次运行此应用程序时删除产品以忽略唯一约束:
                集合.删除(产品1);
                集合.删除(产品2);
                集合.删除(产品3);
                _context.SaveChanges(SaveChangesOptions.Batch);
    
                Console.WriteLine("已删除。抱歉,我改变主意了!");
                控制台.Read();
    
            }
        }
    }
    

以下是客户端代码中最重要的部分:

_context.SaveChanges(SaveChangesOptions.Batch);

See this article "Adding/Creating data to OData/Wcf Data Service batch explained":

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

Update:

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

Quoting from the post as per request in comments

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

Where the following is the most important piece in the client code:

_context.SaveChanges(SaveChangesOptions.Batch);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文