LinqToSql переопределяющая вставка с внутренними классами C # - PullRequest
2 голосов
/ 13 декабря 2008

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

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

Ответы [ 2 ]

2 голосов
/ 15 декабря 2008

Я понял это. Переопределите 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);
    }
1 голос
/ 14 декабря 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...