WCF: nem működik a Linq lekérdezés
2011-11-21T18:21:01+01:00
2011-12-12T22:39:33+01:00
2022-08-05T05:40:28+02:00
[OP]Destroy-man
Egy silverlightos oldalba szeretnék létrehozni egy LINQ kapcsolatot. Én ezzel a tutoriallal próbálkoztam (Inserting and Loading records in Silverlight using LINQ to SQL - DotNetFunda.com) de valahogy nem működik rendesen. Menteni tudok az adatbázisba vele, azaz az insert működik, de a lekérdezésre nem kapok eredményt. Hibás lenne ez a tutorial, vagy valami más gondja lehet?

Nekem annyi változás kellene ehhez a tutoriálhoz képest, hogy nem datagrigbe (ott se működik) kellenének az adatok, hanem egy ComboBox-ba, név / érték párokban.
Mutasd a teljes hozzászólást!
Igen, így le is fordul a kód, csak nem működik.

A visszatérési típusod IList interface és nem egy serializálható (?) objektum.

public IList<csoport> LoadAll()

helyett kéne

public List<csoport> LoadAll()

Szerintem.
Mutasd a teljes hozzászólást!

  • Én ezzel a tutoriallal próbálkoztam

    A saját kódod megmutatnád (insert/select)?
    Egyébként jön a sematikus válasz:

    A hiba a 38. sorban van
    Mutasd a teljes hozzászólást!
  • A service fájl:
    using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; using hirlevel.Web.Modell; using System.Collections.Generic; namespace hirlevel.Web { [ServiceContract(Namespace = "")] [SilverlightFaultBehavior] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class service { [OperationContract] public void insertGroup(csoport cs) { using (modellDataContext db = new modellDataContext()) { csoport gr = new csoport() { id = Guid.NewGuid(), megnevezes = cs.megnevezes }; db.csoports.InsertOnSubmit(gr); try { db.SubmitChanges(); } catch (Exception ex) { throw new Exception("Hiba történt az új csoport létrejöttekor.\nAz új csoport nem lett mentve.\n\nA hiba oka:\n" + ex); } } } [OperationContract] public IList<csoport> LoadAll() { using (modellDataContext db = new modellDataContext()) { var result = from a in db.csoports select a; return result.ToList(); } } // Add more operations here and mark them with [OperationContract] } }

    És a program azon része, melyen le kéne futni a lekérdezésnek (new_msg.xaml.cs):
    public new_msg() { InitializeComponent(); serviceClient service = new serviceClient(); service.LoadAllCompleted += new EventHandler<LoadAllCompletedEventArgs>(service_LoadAllCompleted); service.LoadAllAsync(); } void service_LoadAllCompleted(object sender, LoadAllCompletedEventArgs e) { IEnumerable<csoport> list = e.Result as IEnumerable<csoport>; csoportCB.ItemsSource = list; dataGrid1.ItemsSource = list; }

    Ahogy látszik, oldalbetöltödéskor szeretném megkapni az adott értékeket.

    És az insert kódja is a rend kedvéért (ami egyébként működik):
    private void Button_Click(object sender, RoutedEventArgs e) { serviceClient client = new serviceClient(); client.insertGroupCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(client_insertGroupCompleted); csoport cs = new csoport(); cs.megnevezes = groupName.Text; try { client.insertGroupAsync(cs); } catch (Exception ex) { Message.ErrorMessage(ex.ToString()); } }

    A 38. sorban nem lehet hiba, mert mindkét fájl esetén ott üres sor van. :P
    Mutasd a teljes hozzászólást!
  • Helló!

    Nekem az a tippem, hogy azért nem működik, mert interface-t adsz vissza, a LoadAll() metódusban, azt pedig nem lehet serializálni.

    Szóval ott adj vissza List objectet, és jó lesz.


    Üdv
    Mutasd a teljes hozzászólást!
  • A LoadAll()-ban listát adok vissza (elvileg).
    return result.ToList();
    Mutasd a teljes hozzászólást!
  • Igen, így le is fordul a kód, csak nem működik.

    A visszatérési típusod IList interface és nem egy serializálható (?) objektum.

    public IList<csoport> LoadAll()

    helyett kéne

    public List<csoport> LoadAll()

    Szerintem.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd