Будет ли это безопасно удалить мою запись? - PullRequest
1 голос
/ 18 июня 2010

Я ненавижу эти три таблицы. Две таблицы имеют отношение «многие ко многим» и, как таковые, генерируют третью таблицу.

http://imgur.com/yLKif.png

Я использую Linq-to-SQL и в файле .dbml перетащил все папки на графическую поверхность.

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

        ScansDataContext db = new ScansDataContext();

        /// <summary>
        /// Deletes an Area object from the database along with all associations in the database.
        /// </summary>
        /// <param name="area">Area object to save</param>
        public void Delete(Area area)
        {
            db.DocumentAreaRelations.DeleteAllOnSubmit(area.DocumentAreaRelations);
            db.Areas.DeleteOnSubmit(area);
            db.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
        }

Ответы [ 3 ]

3 голосов
/ 18 июня 2010

Предполагая, что у вас все еще есть ограничения в базе данных, которые навязывают отношения ... похоже, вам стоит пойти ко мне.Если у вас не настроены ключи в базе данных, вам нужно добавить их.

Сначала вы удаляете все связи, затем - сущность, а SubmitCahnges() оборачивает все в локальной транзакции.так что это единица работы.

1 голос
/ 18 июня 2010

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

CONSTRAINT [FK_tblCategory_tblCompany] FOREIGN KEY([CompanyID]) 
REFERENCES [tblCompany] ([ID])ON DELETE CASCADE ON UPDATE CASCADE

или вы можете установить это в своем dataentity

0 голосов
/ 18 июня 2010

У меня есть несколько таблиц, которые делают что-то похожее, используя MS SQL Server 2008.

У меня установлены внешние ключи для каскада при удалении. Таким образом, в ситуации, когда вы находитесь в таблице, я бы удалил область, и как только команда удаления была отправлена ​​на сервер, она автоматически перешла бы в таблицу объединения. Триггер OnDelete можно использовать в таблице соединений, чтобы обеспечить безопасное удаление документов после удаления их записи.

LINQ никогда не жаловался, но для безопасности у меня всегда была функция «Очистка» в моих классах LINQ, которая очищает отношения внешнего ключа одного объекта, если они были перечислены. Хотя это в основном для редактируемых объектов, а не для удаления.

Partial Class MyLINQObject  
    Public Sub ScrubRelationships()  
        _RelatedTableObjects = New EntityRef(Of RelatedTableObject)  
    End Sub  
End Class

Надеюсь, это поможет!

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