我有一个通过 WCF 服务将 ADO 实体数据模型类发送到 Silverlight 的 Web 应用程序。
想象一下这种简化的数据库结构
[项目] ID 名称
[ItemDetail] Id ItemId 值
当项目在我的 SilverlightApp 中时,我向项目添加了一个 ItemDetail,这是 ADO,所以它类似于:
var fv = new ItemDetail();
fv.Value = value;
fv.ItemId = Item.Id;
Item.ItemDetails.Add(fv);
问题在于以下代码,当我将这个对象推回我的服务时,它只保存对现有记录的更改,而不是我创建的新记录。
foreach (var item in entities)
{
if(item.Id == 0)
{
cEnts.Items.AddObject(item);
}
else
{
EntityKey key = cEnts.CreateEntityKey("Items", item);
object orig;
if(cEnts.TryGetObjectByKey(key,out orig))
{
cEnts.ApplyCurrentValues(key.EntitySetName,item);
}
}
}
cEnts.SaveChanges();
必须有一种比遍历所有内容并手动检查然后附加到对象图更好的方法。. . 这意味着每次更改数据库时都必须更新脆弱的代码,并删除 ORM 的全部内容。
是否有一种我缺少的方法可以遍历相关对象并从分离的对象中附加任何新内容?
我什至不认为检查它是新的应该在那里,不应该有一个函数说“好的,这是一个分离的对象,找出它所属的位置(可能基于键)并添加它和任何孩子存在于数据库的其他表中”
我不确定这是否是正确的短语,但我想我已经解释了我想要做什么。