2009-09-02 3 views
0

В моей программе есть два класса, скажем, категория и произведение, причем каждый объект продукта содержит ссылку на категорию, к которой он принадлежит. При загрузке данных из XML и их хранении в базе данных возникает проблема:Загрузка данных из xml

Если я создаю объект категории и сначала сохраню его в базе данных, при создании продукта не будет данных. (Я хочу, чтобы каждая загрузка xml быть транзакционным, таким образом, если пользователь ошибся с ошибкой, база данных останется прежней).

Если я создаю продукт первым, для них не будет ссылки (CategoryID, сгенерированной базой данных). Я также могу сначала проверить все продукты, но при проверке и создании объектов будет много дублированного кода. Какова наилучшая практика?

Заранее спасибо!

+0

Можете ли вы добавить какой язык/технологию вы используете (для вашего уровня обслуживания/DAL)? Это поможет получить более качественные ответы. –

+0

Хорошо, спасибо! Я использую C# и linq2sql как свой DAL. – Roy

+0

linq to sql поддерживает транзакции. См. Http://www.microsoft.com/ru/msdn/nuggets/nugget/206/Transactions-in-LINQ-to-SQL.aspx для примера. Также есть несколько вопросов о stackoverflow о транзакциях и linq2sql, которые должны быть информативными. –

ответ

0

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

В большинстве баз данных, вы можете начать транзакцию с

START TRANSACTION 

и если все это идет хорошо, то вы запустите

COMMIT 

Если что-то выходит из строя, ваш пробег

ROLLBACK 

, и все данные возвращаются к точке, в которой она была, до того, как вы начали транзакцию.

+0

Но, я делаю это в сервисном слое, после DAL, как я могу предоставить транзакцию для уровня обслуживания. Благодаря! – Roy

+0

Какая технология DAL вы используете? В большинстве случаев вы можете использовать транзакции в своем DAL (например, http://www.simple-talk.com/dotnet/.net-framework/.net-2.0-transaction-model/). –