DLINQ - объекты вставляются без .InsertOnSubmit (...)? - PullRequest
2 голосов
/ 23 декабря 2008

Я столкнулся с интересной проблемой при использовании DLINQ. Когда я создаю экземпляр сущности, вызов .SubmitChanges () для DataContext вставит новую строку в базу данных - без вызова .Insert [All] OnSubmit (...).

//Code sample:
Data.NetServices _netServices = new Data.NetServices(_connString);

Data.ProductOption[] test = new Data.ProductOption[]
{
        new Data.ProductOption
        {
             Name="TEST1", 
             //Notice the assignment here
             ProductOptionCategory=_netServices.ProductOptionCategory.First(poc => poc.Name == "laminate")
        }
};

    _netServices.SubmitChanges();

Запуск приведенного выше кода вставит новую строку в базу данных. Я заметил этот эффект при написании приложения для анализа XML-файла и заполнения некоторых таблиц. Я заметил, что было 1000+ вставок, когда я ожидал только около 50 или около того - тогда я, наконец, изолировал это поведение.

Как я могу предотвратить неявное сохранение этих объектов?

Спасибо, -Charles

1 Ответ

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

Думайте об отношениях как о двух сторонах. Когда вы устанавливаете одну сторону отношения, другую сторону необходимо обновить, поэтому в вышеупомянутом случае, а также при установке ProductOptionCategory он эффективно добавляет новый объект в отношение ProductOptions на стороне ламината ProductOptionCategory.

Обходной путь, как вы уже обнаружили, и вместо этого установить базовый внешний ключ, чтобы LINQ to SQL не отслеживал объекты обычным способом и требовал неявного указания, что объект должен сохраняться.

Конечно, лучшим решением для производительности было бы определить из исходных данных, какие объекты вы не хотите добавлять, и никогда не создавать экземпляр в первую очередь.

...