[ _v!rus_ @ 22.01.2008. 22:58 ] @
Pokusavam da napravim jednostavnu c/s aplikaciju za .net 3 u VS-u 2k8 koristeci WCF i LINQ, cisto da se upoznam sa novim/jim tehnologijama :)

Server aplikacija je napravljena za 2 min., glavni service metod je "MojEntitet GetMojEntitet(int RecordID)", a klasa MojEntitet je dobijena sa LINQ to SQL wizardom koji kreira strongly typed klasu MojEntitet. Problem je u tome sto je klasa MojEntitet automatski generisana od strane wizarda. Da bi je "provukao" kroz WebService moram da oznacim klasu sa [DataContract] atributom i svaki public property koji predstavlja po jedno polje entiteta sa [DataMember] atributom direktno u DataClasses.designer.cs fajlu, i onda stvar radi, ali posle ponovnog generisanja fajla promene se naravno gube. Kako da "nateram" designer da koristi pomenute atribute, ako je to uopste moguce? Jos jednom da pakujem svaki entitet u neku trecu klasu samo da bi ga remotovao?

U vezi LINQ-a, kako da prosledim LINQ query nekom metodu, da bi ga on izvrsio "po svom nahodjenu"?

Druga stvar, da li postoji LINQ ekvivalent za SQL WHERE IN, tj. subquerie i liste, npr.
SELECT * FROM Tabela1 t1 WHERE t1.ID_Tabela2 IN (SELECT ID FROM Tabela2 WHERE Tabela2.X = 'Y') --moze isto u INNER JOIN varijanti, mada mi se ovo vise svidja :)
ili
SELECT * FROM Tabela WHERE ID.Vrednost IN (1, 3, 5, 7)

Hvala
[ kuzmam @ 25.01.2008. 11:44 ] @
potrazi odgovor za linq ovde:

http://tomasp.net/blog/linq-expand-update.aspx

[ logic_rabbit @ 25.01.2008. 12:52 ] @
Wcf vjerovatno sve dobro radi,dizajner sigurno nije namjenjen da se u njemu rucno kuca kod (osim posebnih slucajeva :-)).

Mozda ti trebas da vratis genericku listu nekog tipa kada se pozove metod.
Primjer sa Northwind tabelom Customer:

Code:

 public class Service1 : IService1
    {
        public List<Customer> DoWork()
        {
            DataClasses1DataContext db=new DataClasses1DataContext();
            var query = from cus in db.Customers
                        select cus;
            return query.ToList<Customer>();
        }
    }



I ovde promjeniti interface u
Code:

 [ServiceContract]
    public interface IService1
    {
        [OperationContract]
         List<Customer> DoWork();
    }

[ _v!rus_ @ 25.01.2008. 19:35 ] @
@logic_rabbit:

Ne vredi, tako nece da poleti. Kada ukljucim trace u web.config vidim exception:
System.Runtime.Serialization.InvalidDataContractException: Type 'WcfService2.XYZ' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.

Navedene atribute mogu samo da postavim u source-u (koliko ja znam) gde je definisana klasa i property-ji koje zelim da provucem, ali to znaci da moram da menjam *.designer.cs fajl, znaci back to square one.
[ logic_rabbit @ 26.01.2008. 08:29 ] @
To je zato sto nece da serijalizuje relacije kada dodas vise tabela u Datacontext.
Imas jedan clanak o tome na Codeprojectu gdje je covjek pravio svoje Helper klase za serializaciju.
http://www.codeproject.com/KB/dotnet/linqsqlserialization.aspx

Ili da koristis ne direktno u designer.cs fajlu promjene koje si napravio nego u dizajneru stavis serialization mode na
Unidirectional i on ce sam da generise [DataContract] ...
da ti to neradis rucno u designer.cs fajlu :-).

Pozdrav