Nhibernate delete

Wątek przeniesiony 2014-06-12 15:01 z C/C++ przez Rev.

DR
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 11 lat
  • Postów:13
0

Witam
Mam taki problem, próbuję przerobić funkcję usuwającą,w której wykorzystuję HQL na taką z użyciem session.delete() i dodatkowo dla wielu rekordów a nie jednego, mógłby ktoś doradzić coś w tej kwestii?

Kopiuj
 

public void unregisterService(string serviceName)
        {
            // DELETE
            using (ISession session = NHibernateHelper.OpenSession())
                using (ITransaction tx = session.BeginTransaction())
                {
                    var deleteQuery = session.CreateQuery("DELETE FROM Services WHERE ServiceName = :serviceName");
                    deleteQuery.SetString("serviceName", serviceName).ExecuteUpdate();                
                    Logger.log.Info(serviceName + " was unregistered!");              
                }         
        }

spartanPAGE
C# ma swój własny dział.
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0
Kopiuj
(Session.Query<T>().Where(x => x.Name == "blablabla")).ForEach(t => Session.Delete(t));

Pisane z palca.

  • Nh LINQ jako tako nie wspiera usuwania przez query, wiec jest kicha.
edytowany 2x, ostatnio: n0name_l
DR
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 11 lat
  • Postów:13
0

Coś nie trawi mi kompilator tego ForEach na końcu, kombinuję trochę inaczej:

Kopiuj
 

public void unregisterService(string serviceName)
        {
            // DELETE
            using (ISession session = NHibernateHelper.OpenSession())
                using (ITransaction tx = session.BeginTransaction())
                {
                    //var ts = session.QueryOver<Services>().Where(x => x.ServiceName == serviceName).SingleOrDefault();
                    //foreach (var bla in ts)

                    Services service = session.QueryOver<Services>().Where(x => x.ServiceName == serviceName).SingleOrDefault();
                    foreach (Services bla in service)

                }         
        }

Tylko tutaj też foreach ma jakiś problem, mogę to jakoś tak zrobić?

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

Olaboga.

Kopiuj
public void unregisterService(string serviceName)
        {
            // DELETE
            using (ISession session = NHibernateHelper.OpenSession())
                using (ITransaction tx = session.BeginTransaction())
                {
                    var services = session.Query<Services>().Where(x => x.ServiceName == serviceName);
                    foreach (Services s in services) session.Delete(s);
                }         
        }
  • Zmien ta nazwe klasy na liczbe pojedyncza.
edytowany 2x, ostatnio: n0name_l
mychal
Services to chyba jakaś jego klasa (raczej nie kolekcja), więc raczej powinno być var services = session....
n0name_l
O, dzieki! Sam sie zakrecilem przez ta nazwe. :|
DR
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 11 lat
  • Postów:13
0

Ok, chyba to ogarnąłem :)

Mam jeszcze pytanie odnośnie update-owania. Chcę ustawić atrybut klasy Services na jakąś wartość, zrobiłem tak:

Kopiuj

Services services = session.Query<Services>().Where(x => x.ServiceName == serviceName).SingleOrDefault();
services.Counter = 3;
foreach (Services s in services)
     session.Update(s);

Wiem że powinno być var services = ... ale wtedy nie mogę się odnieść do atrybutu. Teraz jednak podkreśla mi foreach że nie odnoszę się do kolekcji :/

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

Zmien nazwe tej klasy bo bedziesz coraz bardziej wchodzil w bagno... Ta klasa, jak ci kompilator mowi, nie jest przystosowana dla foreacha.

mychal
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Przedmonitorze Górne
0

OMG, bo nie odnosisz się do kolekcji! myśl! Po co w ogóle Ci ten foreach tutaj?

Kopiuj
session.Update(services);

I fart u die.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.