Предложение для уровня доступа к данным с Entity Framework - PullRequest
1 голос
/ 14 марта 2011

Я хочу, чтобы вы ознакомились с этим вопросом:

Я пишу уровень доступа к данным с использованием Entity Framework и универсальных классов. Так как использование транзакций в C # не очень хорошая практика: Проблема с системой.Transactions, SqlConnection и Timeout

Я хочу написать свой оператор выбора, используя Linq To Entities, но другой оператор, такой как «INSERT, DELETE, UPDATE, ...» в хранимых процедурах (потому что это должно бытьв транзакции с некоторыми другими операторами) и вызывать их на уровне доступа к данным.

Это хорошо?Это несовместимо с многоуровневым? Может кто-нибудь продемонстрировать некоторые статьи?

спасибо большое

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

Вы можете написать весь слой доступа к данным, используя Entity Framework.Для транзакции вы можете использовать EF Context.Это будет автоматически управлять транзакцией для вас, если существует одна база данных.

using(var context = new YourDataContext())
{
   //use context for CRUD operation
   Entity1 entity1 = context.Entities1.Where(e1 => e1.Id == 1);
   entity1.Prop1 = "New Value";  

   context.Entities2.Add(entity2)

   context.SaveChanges();
}

Есть ли причина, по которой вы не хотите выполнять вставку / обновление / удаление с использованием EF?

1 голос
/ 15 марта 2011

Я хочу написать свой оператор выбора, используя Linq To Entities, но другой оператор, такой как «INSERT, DELETE, UPDATE, ...» в хранимых процедурах (потому что он должен находиться в транзакции с некоторыми другими операторами), и вызватьих на уровне доступа к данным.

Вы можете использовать для этого TransactionScope вместе с EF.Это позволит вам добавить транзакции поверх EF, которые будут выполняться (внешняя транзакция).

using (TransactionScope transaction = new TransactionScope())
{
    //your EF query here
    using(var context = new EFContext())
    { } 
}
0 голосов
/ 15 марта 2011

Вы можете использовать функцию import для выполнения хранимых процедур.Тогда вы, очевидно, можете обернуть всю свою логику транзакций в эти хранимые процедуры.Мне нравится структура сущностей, но у меня есть те же проблемы, что и у вас.Импорт функций - это то, как я выполнил большую часть своей транзакционной обработки и сложной логики.

Ваш код будет выглядеть так (в упрощенном виде) ...

using (var context = new YourContext())
{
    context.ExecuteProcToRunTransaction("parameter 1", "parameter 2");
}
...