我有一个基础食谱类,我正在使用datacontext。我在datacontext中覆盖了配方的insert方法,并试图插入其子节点。无论我做什么我都不能让孩子插入。目前,只是配方插入,孩子没有任何事情发生。
partial void InsertRecipe(Recipe instance)
{
// set up the arrays
for (int x = 0; x < instance.PlainIngredients.Count; ++x)
{
instance.TextIngredients.Add(new TextIngredient()
{
StepNumber = x + 1,
Text = instance.PlainIngredients[x]
});
}
this.ExecuteDynamicInsert(instance);
}
我已经尝试了所有我能想到的东西。我甚至在方法中实例化了另一个datacontext,然后在实例从带有id的ExecuteDynamicInsert返回后,尝试添加它,并且我得到超时错误。
答案 0 :(得分:2)
我明白了。覆盖DataContext中的SubmitChanges,并查找作为配方的所有插入和更新。运行算法在那里添加子项。
public override void SubmitChanges(
System.Data.Linq.ConflictMode failureMode)
{
ChangeSet changes = this.GetChangeSet();
var recipeInserts = (from r in changes.Inserts
where (r as Recipe) != null
select r as Recipe).ToList<Recipe>();
var recipeUpdates = (from r in changes.Updates
where (r as Recipe) != null
select r as Recipe).ToList<Recipe>();
ConvertTextData(recipeInserts);
ConvertTextData(recipeUpdates);
base.SubmitChanges(failureMode);
}
答案 1 :(得分:1)
在LINQ to SQL确定哪些对象将包含在SubmitChanges中之后调用InsertX / UpdateX / DeleteX方法。
由于两个事务之间存在锁定问题,因此很可能使用两个DataContext超时。
我无法清楚地知道你在这里想要实现的目标 - 通常LINQ to SQL管理子关系本身 - 什么是PlainIngredients和TextIngredients?