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