Linq to SQL DataContext lifetime

by melborp 16. märts 2009 21:58

Üks teemaisd, mis mind mõnda aega on Linq to SQL juures mõtisklema pannud, on selle lifetime ehk kui kaua DataContext –i tuleks elus hoida või tohib elus hoida. Kõik räägivad, et see pole nagu tavaline ORM vaid veidi erinev. Nüüd sattusin väga hea info otsa, mis seletab, kuidas DataContexti elu tuleks hallata ja kuidas see erinev on tavalisest ORM –st.

Võibolla on kasulik ka teistele. Iseenesest teema ei ole uus, aga aeg vahest takistab kõikidesse mõtisklustesse sügavamalt sisse minna ja hiljem lihtsalt ununeb.

Dinesh Kulkarni blogis on üldse palju kasulikku infot Linq to SQL kohta, ta oli Senior Developer LINQ –i (C#) meeskonnas .

Eraldi tooks välja nippide seeria koos mõne lemmikuga:

Eks igaüks leiab oma koha, kus Linq to SQL on kõige sobilikum. Olge ettevaatlikud ja teadlikud DataContexti toimimisest, eriti kui tulete tavapärase ORM –i taustaga.

Tags:

.Net | C# | LINQ | Tips & Tricks

LINQ -i lahenduste disainimise juhend

by melborp 17. märts 2008 22:33

Ma olen nüüd mõnda aega veidi vaiksem poiss olnud (hetkel tööl jube kiire ja nii mõnigi on vast märganud, et Microsoftil on toodete lansseerimise aeg, mis hoiab ka mind tegevuses), kuid antud viite edasi andmisest ei suuda end tagasi hoida.

Micrea Trofin Microsoftist on avalikustanud do's & dont's laadse juhendi LINQ -i kohta, mida soovitan kõigil, kes LINQ -i kasutavad üle vaadata.

Tags:

Microsoft | Huvitav leid | LINQ

Kasulikud viited: LINQ, Spotlight

by melborp 29. jaanuar 2008 18:02

LINQ to SQL -i näidete ressurss

Leidsin LINQ to SQL -i group by lause näiteid otsides väga vinge ressursi, kus oli palju erinevaid LINQ to SQL -i näiteid. Kahjuks on antud näited kirjutatud VB.NET -s, aga põhimõtteliselt ei tohiks see häirida - LINQ on ikka sama :) C# -i jaoks näiteid ei leidnud.

Technet Spotlight

Microsoft organiseerib aastas palju prestiižeid ja suuri üritusi nagu TechEd, IT Forum, SOA & Buisness Process Conference jne. Nüüd juba mitmed kuud on kättesaadav kõigile keskkond nimega Technet Spotlight, kuhu pannakse üles erinevate ürituste videod ning neid võib igaüks vaadata. Antud vihje sain tänasel Andmekaeve ja ärianalüütika seminaril - tänud Rafal Lukawieckile.

Edu LINQ -i ja videotega!

Tags:

Microsoft | Huvitav leid | LINQ | Viited

Tasuta raamat: Sissejuhatus LINQ -i

by melborp 18. jaanuar 2008 10:33

intro_to_linq Olen nüüd juba mõnda aega näppinud LINQ -i ning aina rohkem hakkab antud lähenemine meeldima. Järgmiseks mõistlikus sammuks, et saada süvateadmisi oleks seega raamatu ostmine ja muidugi LINQ -i järjepidev kasutamine (ehk progeda, progeda, progeda). Sobivat raamatut otsides sain informatsiooni, et Microsoftil on kampaania, mille käigus antakse ära tasuta e-raamat (pdf kujul) pealkirjaga "Introducing Microsoft LINQ". Kõlas alguseks väga sobivalt ning hankisin selle endale.

Esmapilgul võib tunduda, et antud raamatu kättesaamiseks tuleb "Book Connection Newsletter" -i uudiskirja saajateks registreerida, aga nii see ei ole. Registreerimine on vajalik ainult raamatu allatõmbamiseks.

Kes soovib sama teha ning saada tasuta raamatu "Introducing Microsoft LINQ" leiab pakkumise siit. Lisaks pärast uudiskirjale registreerimist saab alla tõmmata ka kaks peatükki raamatutest "Introduction to Silverlight" ja "Introduction to Microsoft ASP.NET AJAX".

Järgnev on pilt lehest, millele jõuate pärast registreerimist ning antud lehel on ka loetelu peatükkidest, mida allalaetavad PDF -d sisaldavad.

free-ebooks

Tags:

LINQ | Microsoft | Silverlight | Uudis

Tip - Linq to SQL: alati kutsuge välja parameetriteta konstruktor

by melborp 13. jaanuar 2008 01:17

Ühe projekti raames õnnestub mul kasutada Linq to SQL -i ning sattusin täiesti pisikese ebameeldivuse otsa (teadmatus lihtsalt).

Nimelt kui te loote ilusti omale DataContexti (mis kujutab endast klassimudelit, mappingut andmebaasi mudeliga) ja te soovite mõnda nendest klassidest rikastada mugavama konstruktoriga, siis alati tuleks uus konstruktor panna välja kutsuma parameetriteta versiooni. Ehk koodis tähendaks see seda:

Oletame, et meil on olemas klass Inimene (pole mõtet siin näidata) ja see inimene on seoses mitmete teiste klassidega (andmebaasis siis andmebaasi tabelitega). Soovime laiendada seda järgnevalt:

    public partial class Inimene
    {
        public Inimene(string nimi)
        {
            this.Nimi = nimi;
        }
    }

Antud laiendus ei toimi, kui loote uue instantsi üleval pool kirjeldatud konstruktoriga ning proovite lisada InsertOnSubmit meetodiga DataContexti. Nimelt teeb genereeritud klassi Inimene parameetriteta konstruktor tegelikult midagi asjalikku (inimene nimelt on seotud ühe või mitme teise klassiga, ja selle seose algoleku initsialiseerib LinqToSql -i poolt genereeritud konstruktor). Teil on variant, kas kutsuda oma uues fancys konstruktoris välja parameetriteta konstruktor või initsialiseerida seotud klassid ise.

Õige on seega:

    public partial class Inimene
    {
        public Inimene(string nimi) : this()
        {
            this.Nimi = nimi;
        }
    }

Miks?

Kui te seda ei tee, siis saate kummalise NullReferenceExceptioni ja mõtisklete mõnda aega, miks see nüüd ilmnes, kui te ise "kõik" vajaliku sel hetkel ära väärtustasite :)

Tags:

Microsoft | C# | LINQ

LINQ -i kasutamine varasemates .Net -i lahendustes

by melborp 18. detsember 2007 01:13

Mõni hetk tagasi postitasin, et .Net 3.5 pole muud kui täiendus .Net 2.0 -le ja .Net 3.0 -le. Antud postitusega proovingi väidet tõestada ühe elusa näitega. Tõestan, et Sharepoint 2007 toimib ilusti ka siis, kui installeeritud on .Net 3.5 raamstik ja mul on ka võimalik kasutada Sharepointi sees LINQ -i.

Välja mõtlesin järgmise proovi stsenaariumi

Loon Webpart -i Sharepointile, mis kasutab endas LINQ -i võimalusi (LINQ to XML, kui täpne olla). Loodud Webparti kuvan Sharepointi rakenduslehel (application page).

Tegevus

Installeerisin .Net 3.5 -e raamstiku oma Sharepointi arenduskeskkonda, kus ei olnud .Net 3.5 -e varjugi ennem. VS2008 -t pole seal ammugi (pole veel jõudnud omale uut masinat ehitada VPC peale). Samas .Net 3.5 -e lahenduse mugavaks ehitamiseks peab mul olema seda platvormi toetav vahend ja õnneks läpakas VS2008 eksisteerib. Seega ehitan läpakas webparti, kompileerin DLL -ks ning viin Sharepointi, mis jookseb virtuaalses masinas.

Webpart -i kood on väga lihtne. Mul on XML, milles on kolm kasutaja (User) elementi. Ma kasutan Linq to XML -i, et saada kõik User elemendid ning loon igale ühele vastava anonüümse tüübi. Hiljem lihtsalt kuvan need veebilehel kasutades Literal kontrolli.

[Guid("ce0828c1-1561-4090-b196-a7773567262d")]
public class CustomWebPart : WebPart
{
    static string XML = 
        "<Users><User id=\"1\"><Name>Taavi</Name></User>"+
        "<User id=\"99\"><Name>LINQ</Name></User><User id=\"666\">"+
        "<Name>Mingi kolmas nimi.</Name></User></Users>";

    protected override void CreateChildControls()
    {
        XElement usersXml = XElement.Parse(XML);

        var users = from User in usersXml.Descendants("User")
                    select new { 
                        Id = User.Attribute("id").Value, 
                        Name = User.Element("Name").Value 
                    };

        foreach (var user in users)
        {
            Literal l = new Literal();
            l.Text = 
                string.Format("id: {0}, name: {1}; </br>", user.Id, user.Name);
            this.Controls.Add(l);
        }
    }
}

Peale DLL -i ehitamist, paigutan DLL -i Sharepointi Bin kataloogi virtuaalses masinas.

demolincontrol_bin

Seejärel mainin Sharepointi web.config -s ära, et antud DLL on usaldusväärne (SafeControl element). Ja järgnevalt võingi hakata kasutama suvalises Sharepointi lehes antud webparti. Mina plaanin lehena kasutada Sharepointi application page -e.

Selleks loon .aspx faili "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS" kausta, mille sisuks on all olev kood:

<%@ Page Language="C#" MasterPageFile="~/_layouts/simple.master" %>
<%@ Register TagPrefix="Sharepoint" Namespace="Microsoft.SharePoint.WebControls" 
Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="DemoLinq" Namespace="DemoLinqControl" 
Assembly="DemoLinqControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba05d76c6be11619" %>

<%-- Lehe sisu osa --%>
<asp:Content ID="MainContent" runat="server" ContentPlaceHolderID="PlaceHolderMain">
<DemoLinq:CustomWebPart ID="Demo" runat="server" />
</asp:Content>

Ning IE -ga lehele minnes on tulemuseks järgmine väljund:

linqAndSP

M.O.T.T

Üleval teotstatud tegevustest tulenevalt, võin järeldada, et on võimalik edukalt kasutada .Net 3.5 raamistiku funktsionaalsust olemasolevas .Net -i lahenduses (juhul kui tegu on vähemalt .Net 2.0 -i lahendusega). Uue raamistiku installeerimine ei mõjuta olemasolevat rakendust, samas võimaldab selles uue raamistiku omaduste kasutamist. Mina näitasin seda Sharepointi najal.

Ahsoo, miks see nii on? Sest mõlemal juhul on tegu tegelikult CLR 2.0 -ga (ehk sama jooksutamiskeskkonnaga).

Edu!

Tags:

.Net | LINQ | Microsoft | Sharepoint | Sharepoint development

LINQ to LDAP: active directory -ga suhtlemiseks

by melborp 17. detsember 2007 23:23

Nüüd kui .Net 3.5 on väljas võib näha aina rohkem täiendusi tulemas uuele platvormile. Mõni aeg tagasi tuli välja LINQ -i päringute provider, mis võimaldab suhelda LDAP -i andmehoidlatega nagu Active Directory.

Täpsemat infot ja näiteid niisuguse provideri kohta leiate siit ning projekt ise asub codeplexis.

Kes ikka veel ei tea, mis LINQ on, saab täpsemalt lugeda selle kohta MSDN -st. Lühidalt võib öelda, et see on päringute tegemise keel integreeritud .Net 3.5 -te. See on üks põhilisemaid täiendusi, mis uue .Net -ga kaasa tuleb (teistest täiendustest kirjutan ka mina varsti).

Lisaks LINQ to LDAP, on olemas ka LINQ to Entities, LINQ to XML, LINQ to SQL, ja olen kuulnud ka, et tulemas on LINQ to Sharepoint.

Nüüd, et teid julgustada uut .Net -i platvormi kasutama, siis võin öelda, et .Net 3.5 -e peale panemine ei mõjuta olemasolevat platvormi. .Net 3.5, väga lihtsalt öeldes, ei ole muud midagi kui laiendused .Net 2.0 -le ja .Net 3.0 -le. Oletame, et teil on Sharepoint 2007 serveris jooksmas mis by default kasutab .Net 2.0 -i ja .Net 3.0 -i, siis .Net 3.5 -e peale panemine ei mõjuta Sharepoint 2007 -t, sest tema ei kasuta .Net 3.5 -te.

Ideeliselt võite te isegi luua Sharepointile (või mõnele teisele .Net 2.0 või .Net 3.0 -i kasutavale lahendusele) funktsionaalsust, mis kasutab näiteks LINQ -i (ehk .Net 3.5 -te) ja see peaks toimima ilusti Sharepointi (või mõne teise lahenduse) sees - see pole muud kui välise library kasutamine .Net -i lahenduse juures - vaja on ainult viidet assembly -le.
Note: Ma pole seda testinud, aga nii see peaks toimima loogiliselt võttes. Kui aega saan, siis testin ära ka.

Tags:

.Net | Microsoft | Sharepoint | LINQ

Autorist

Taavi Kõosaar

 Tere, olete sattunud mu blogi peale. Olen Taavi Kõosaar - tarkvara arendaja, arhitekt ja konsultant keskendudes arendamisele .NET -i platvormil. Hetkel asun peamiselt Rootsis, kus töötan Süsteemi Arhitektina toote/teenuse arendamisel, mida kasutatakse üle Euroopa. Lisaks tööle blogin, kirjutan artikleid, pean loenguid, treeninguid, reisin, loen raamatuid, sukeldun, teen sporti, fotografeerin, osalen Eesti arendajate kommuunis ...

Siit leiate minu mõtisklused ja seiklused tarkvara arendamisega, .NET -ga ja Team Systemiga.

Kalender

<<  september 2010  >>
estekonerela
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar

Liikmelisus

www.eneta.ee

Team System MVP

Tutvu minu LinkedIn profiiliga

Minu Eneta profiil

Lugejatest

Kaart:

Lugejad:

Hetkel lehel:

hit counters

Külastajaid:

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

Siin toodud arvamuseid saab käsitleda vaid kui minu isiklike arvamusi, need ei kajast vähimalgi kombel ühegi minu tööandja arvamusi ja nägemusi.

© Copyright 2010 Melborp.NET