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

Nhibernate delete

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?

 

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!");              
                }         
        }

0
(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.
0

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

 

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ć?

0

Olaboga.

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.
0

Ok, chyba to ogarnąłem :)

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


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 :/

0

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

0

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

session.Update(services);

1 użytkowników online, w tym zalogowanych: 0, gości: 1