LinqToSql覆盖内部类C#的插入

时间:2008-12-13 13:37:46

标签: c# linq-to-sql

我有一个基础食谱类,我正在使用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返回后,尝试添加它,并且我得到超时错误。

2 个答案:

答案 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?