保存关系实体的WCF数据服务

本文关键字:数据 服务 WCF 关系 实体 保存 | 更新日期: 2023-09-27 18:09:05

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

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

在我的模型中,Contact和Address的关系是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轻松保存回相关实体?

保存关系实体的WCF数据服务

这可能不是最好的答案,但它对我有效…当尝试在WCF Data Services中创建相关对象时,您必须手动设置"反向引用"(这是行为与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)真的很痛苦……对于与延迟相关的场景,您可以考虑使用不同的东西…

我终于让它工作了:

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

这是通过连接到WCF服务以添加关系对象的4个单独调用。这一切结束后,我将打14个电话,一周!