【问题标题】:WCF Data Services saving relational entitiesWCF 数据服务保存关系实体
【发布时间】:2011-09-20 23:30:37
【问题描述】:

我正在尝试通过 WCF 将对象保存回数据库,如下所示(伪代码):

var Contact = new Contact
{
    Id = Guid.NewGuid(),
    Name = "Test",
    Address = new Address
    {
        Id = Guid.NewGuid(),
        Postcode = "blah"
    }
};

在我的模型中,联系人和地址的关系是 1 对 1,但这样做会失败:

DB.AddToContacts(Contact);
DB.SaveChanges();

抱怨关系不满足,不能为空。所以我尝试了这种方法:

DB.AddToContacts(Contact);
DB.AddToAddresses(Contact.Address);
DB.AddRelatedObject(Contact, "Address", Contact.Address);
DB.SaveChanges();

但现在我得到“AddRelatedObject 方法仅在 sourceProperty 是一个集合时才有效。”。

我的问题:如何通过 WCF 轻松保存相关实体?

【问题讨论】:

    标签: c# wcf asp.net-mvc-3 wcf-data-services


    【解决方案1】:

    这可能不是最好的答案,但它对我有用...当尝试在 WCF 数据服务中创建相关对象时,您必须手动设置“反向引用”(这是行为与EF的正常使用)..

    因此,在您的情况下,您必须设置如下:

    var Contact = new Contact
    {
      Id = Guid.NewGuid(),
      Name = "Test",
      Address = null
    };
    
    var address = new Address
    {
          Id = Guid.NewGuid(),
          Postcode = "blah",
          // This is important
          Contact = Contact
    };
    
    contact.Address = address;
    DB.AddToContracts(Contract);
    DB.SaveChanges();
    

    这很烦人...当我以“硬”的方式获得这种体验时。WCF 数据服务速度很慢,并且选择分层数据(例如 Order - OrderPosition - Product )真的很痛苦...您可以考虑使用某物。与延迟相关的场景不同...

    【讨论】:

    • 这对我来说根本不起作用,我的模型在它到达数据库调用时已经填充到树下,并且大约有 8 种不同的关系 - 必须有一个更简单的方法... :-(
    【解决方案2】:

    我终于通过这样做让它工作了:

    DB.AddToAddresses(Client.Address);
    DB.AddToClients(Client);
    
    DB.SetLink(Client, "Address", Client.Address);
    
    DB.SaveChanges();
    

    即通过网络对 WCF 服务进行 4 次单独调用以添加关系对象。最后,我会打 14 次电话,哎呀!

    【讨论】:

    • 您使用的是什么版本的 WCF? DB.SaveChanges 方法上可能有一个SaveChangesOptions 类型的选项参数,这将允许您批量发送请求。无论如何,我希望最多 3 次调用,因为 SaveChanges 会导致请求发生,它本身不会触发额外的 HTTP 请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多