WCF数据服务保存关系实体

时间:2011-09-19 14:41:29

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

我正在尝试通过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轻松保存相关实体?

2 个答案:

答案 0 :(得分:0)

这可能不是最佳答案,但它对我有用...当尝试在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)真是太痛苦了......你可以考虑使用......与延迟相关的场景不同......

答案 1 :(得分:0)

我最终通过这样做得到了它:

DB.AddToAddresses(Client.Address);
DB.AddToClients(Client);

DB.SetLink(Client, "Address", Client.Address);

DB.SaveChanges();

这是通过有线连接到WCF服务的4个单独调用来添加关系对象。在结束时,我将打14个电话,eek!