保存关系实体的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 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个电话,一周!