Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Linq - brak kontroli

0 views
Skip to first unread message

imbirek8

unread,
Jun 12, 2008, 12:37:48 PM6/12/08
to
Cześć,

Mam pytanie odnośnie Linq, chcę mieć kontrolę nad transakcyjnością. Mam kod
jak poniżej. Tworzę połączenie i transakcję, po zapytaniu zamykam transakcję
i połączenie. Jednak gdy jeszcze raz odwołuję się do "select", to linq
tworzy mi nowe połączenie i wykonuje zapytanie (sprawdzam Profilerem). Ja
chciałbym, żeby po zamknięciu połączenia, nie było już możliwości
wykonywania zapytań!
Jak rozwiązać ten problem ?

SqlConnection dbc = new SqlConnection("MojConnectionString");
SqlTransaction transaction = null;
try{
dbc.Open();
transaction = dbc.BeginTransaction();
DataClassesDataContext db = new DataClassesDataContext(dbc);
db.Transaction = transaction;

var select = from o in db.tabelkas select o;
List<tabelka> listaTmp = new List<tabelka>(select); //zapytanie na bazie

transaction.Commit();
dbc.Close();
db = null;
dbc = null;
List<tabelka> listaTmp2 = new List<tabelka>(select); //wznowienie
połączenia! chcę wyjątek!
}
catch (Exception ex){
if(transaction!=null)
transaction.Rollback();
}

Dzięki za rady

Wiktor Zychla

unread,
Jun 12, 2008, 5:33:13 PM6/12/08
to
> db = null;
> dbc = null;

to nie kłopot z Linq, tylko z rozumieniem jak działają referencje. masz
obiekt select oparty o referencję do db. potem tę referencję do db
przepinasz na null, a obiekt select DALEJ wskazuje na tamtą starą.

musisz jakoś zaburzyć parametry połączenia, tylko nie wiem jaki to ma sens,
np.

db.Connection.Dispose();

> List<tabelka> listaTmp2 = new List<tabelka>(select); //wznowienie
> połączenia! chcę wyjątek!

na pewno dostaniesz wyjątek!

Wiktor Zychla

imbirek8

unread,
Jun 30, 2008, 3:39:30 PM6/30/08
to
"Wiktor Zychla" <us...@nospam.com.eu> wrote in message
news:g2s4pk$eu0$1...@atlantis.news.neostrada.pl...
[...]

> musisz jakoś zaburzyć parametry połączenia, tylko nie wiem jaki to ma
> sens, np.
>
> db.Connection.Dispose();
>
>> List<tabelka> listaTmp2 = new List<tabelka>(select); //wznowienie
>> połączenia! chcę wyjątek!
>
> na pewno dostaniesz wyjątek!

Po zastosowaniu:
db.Connection.Dispose();
i powtórnym odwołaniu się do "select" wyjątku niestety nie ma, a profiler
pokazuje wyraźnie, że zapytanie zostało zadane bazie - z powodzeniem.

Pozdrawiam

0 new messages