LINQ to SQL Transaction, когда Transaction имеет тип Table <Transaction> - PullRequest
3 голосов
/ 07 июля 2011

Я пытаюсь создать транзакцию, чтобы обернуть несколько вызовов LINQ to SQL SubmitChanges ().

код

System.Data.Common.DbTransaction trans = null;

using (DbContext context = new DbContext())
{
    context.Connection.Open()
    trans = context.Connection.BeginTransaction();

    context.Transaction = trans; // <-- ERROR HERE: Cannot be done!

    .... // Several calls to delete objects with context.SaveChanges()

    trans.Commit();
}

Задача

В нашей схеме базы данных (которая предшествует мне и тесно связана с приложением) у нас есть таблица с именем Transaction.

Это означает, что свойство Transaction в приведенном выше коде на самом деле не является типом IDbTransaction, и я не могу назначить объект trans для context.Transaction. context.Transaction на самом деле имеет тип Table<Transaction>.

Вопрос

Как я могу назначить транзакцию моему контексту, учитывая неизменяемый в настоящее время факт наличия у меня таблицы с именем Транзакция?

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

1 Ответ

2 голосов
/ 07 июля 2011

Если свойство Transaction из DataContext скрыто вашим классом DbContext, просто приведите:

((DataContext) context).Transaction = trans;

Таким образом Transaction разрешается компилятором вместо DataContext.Transactionиз DbContext.Transaction.

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

DataContext vanillaContext = context;
vanillaContext.Transaction = trans;

(я понятия не имею, является ли этокстати, это правильный способ использовать транзакцию - это просто способ обойти конфликт имен.)

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