LinqToSql переопределяющая вставка с внутренними классами C #

У меня есть базовый класс рецептов, и я использую текст данных. Я переопределил метод вставки для рецепта в текстовом тексте и пытаюсь вставить его в дочерние элементы. Что я делаю, я не могу заставить ребенка вставить. В настоящее время только рецепт вставляет, и с ребенком ничего не происходит.

    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 в методе и после того, как экземпляр вернулся из ExecuteDynamicInsert с идентификатором, попытался добавить его, и я получил ошибки тайм-аута.

13.12.2008 13:37:45
2 ОТВЕТА

Методы InsertX / UpdateX / DeleteX вызываются после того, как LINQ to SQL определит, какие объекты будут включены в SubmitChanges.

Вы бы получили тайм-аут, используя два DataContext, скорее всего, из-за проблем блокировки между двумя транзакциями.

Я не могу четко понять, чего вы пытаетесь достичь - обычно LINQ to SQL управляет дочерними отношениями самостоятельно - что такое PlainIngredients и TextIngredients?

1
14.12.2008 19:25:30
РЕШЕНИЕ

Я понял. Переопределите SubmitChanges в DataContext и найдите все вставки и обновления, которые являются рецептами. Запустите алгоритм, чтобы добавить туда детей.

    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);
    }
2
15.12.2008 01:57:21