У меня есть базовый класс рецептов, и я использую текст. Я переопределил метод вставки рецепта в тексте данных и пытаюсь вставить его в его дочерние элементы. Независимо от того, что я делаю, я не могу заставить ребенка вставить. В настоящее время вставляет только рецепт, и с ребенком ничего не происходит.
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);
}
Я перепробовал все, что мог придумать. Я даже создал экземпляр другого контекста данных в методе, и после того, как экземпляр вернулся из ExecuteDynamicInsert с идентификатором, я попытался добавить его, и у меня возникли ошибки тайм-аута.





Методы InsertX / UpdateX / DeleteX вызываются после того, как LINQ to SQL определит, какие объекты будут включены в SubmitChanges.
Вы бы получили тайм-аут при использовании двух DataContext, скорее всего, из-за проблем с блокировкой между двумя транзакциями.
Я не могу четко понять, чего вы здесь пытаетесь достичь - обычно LINQ to SQL сам управляет дочерними отношениями - что такое PlainIngredients и TextIngredients?
Я понял. Переопределите 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);
}