• Home
  • Events
  • Forum
  • Chat
  • Archive
  • Contact
  • About us
Login Subscribe
 

Search


Tag Cloud

  • forsiden
  • generelt
  • linq
  • linq til filsystem
  • linq to sql
  • microsoft visual studio 2008 service pack 1
  • velkommen
  • visual studio 2010

Categories

  • RSS feed for ForsidenForsiden (1)
  • RSS feed for GenereltGenerelt (1)
  • RSS feed for LINQLINQ (3)
  • RSS feed for Visual Studio 2010Visual Studio 2010 (1)

Archive

  • 2009
    • May (1)
    • March (1)
  • 2008
    • August (1)
    • February (1)
  • 2007
    • December (3)

Links

  • RSS feed for .NET slave.NET slave
  • RSS feed for Al NyveldtAl Nyveldt
  • RSS feed for Ruslan TurRuslan Tur

Visual Studio 2010 og .NET 4.0 tilgjengelig i Beta 1 versjon

Monday, 25 May 2009 10:02 by Christian Schiffer

Mange vet det allerede men det må likevel nevnes at Visual Studio 2010 og .NET 4.0 nå er tilgjengelig i Beta 1-versjon.image

Jeg lastet ned versjonen i helga og installerte VS 2010 på min hjemme PC side om side med VS 2008,  installasjonen gikk knirkefritt bortsett fra at jeg måtte frigjøre noe mer plass underveis.

Første inntrykket av Visual Studio 2010 er at brukergrensesnittet har blitt både bedre og mer intuitiv. Intellisense har også modnet ytterligere og da spesielt når det gjelder klientside skripting.

Applikasjonen virker ikke tyngre enn forgjengeren og for å være beta 1 versjon så virker den rimelig bra og uten de store feil og krasj.

Likevel, Beta 1 er ikke klar for noe produksjonsmiljø idet den er litt treig og om mann ikke venter på at den skal gjøre gjeldene oppgave ferdig hender det den rett og slett  skipper over viktige bakgrunnsoppgaver. Det var i alle fall mitt inntrykk.

Hjemmemaskinen min er en bærbar med brukbar prosessor og 4 GB ram. Arbeidsstasjonen på kontoret som er en Dual Quad Core Xeon maskin med 8 GB ram og sas raid disker ville nok klart å gi den nødvendige kraft til å ha en adekvat arbeidsflyt med Visual Studio 2010 allerede nå. Men jeg vil selvsagt vente en tid, muligens frem til RC versjonen før jeg installerer på produksjonsmaskinen min med tanke på eventuelle problemer med side om side operasjon som enda ikke er avdekket.

Men last ned selv: Visual Studio 2010 er tilgjenglig her.

Siste: Etter et par måneder på min hjemmemaskin har jeg ikke avdekket vesentlige problemer med å ha VS 2010 Beta1 innstallert side om side med VS 2008. Jeg opplever det derfor som trygt nok å innslallere neste versjon på produksjonsmaskinen etter en komplett backup.

Currently rated 4.3 by 6 people

  • Currently 4.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tagger:   visual studio 2010
Kategorier:   Visual Studio 2010
Handlinger:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

Generic update method for Linq to Sql

Thursday, 12 March 2009 14:56 by Christian Schiffer

image I am developing a generic Linq to Sql data access layer, one method drove me totally crazy, it kept coming up with the error message: “System.InvalidOperationException: An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy..”

I will try to see if I have time to come back with an explanation to this problem and its solution, for now I’ll just give you the solution to the problem.

For now I have come up with the following solution:

 

 

 /// <summary>
 /// Update an Existing Object
 /// </summary>
 /// <typeparam name="T">The type of the model want to update</typeparam>
 /// <param name="instance">The instance we wish to update</param>
 public void Update<T>(T instance) where T : class
 {
     using (var data = new NorthwindDataContext<T>(_connectionString))
     {
         Table<T> table = data.GetTable<T>();
         table.Attach(instance);
         data.Refresh(RefreshMode.KeepCurrentValues, instance);
         data.SubmitChanges();
     }
 }
Happy coding everyone.

Currently rated 4.0 by 4 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tagger:   linq
Kategorier:   LINQ
Handlinger:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

Visual Studio 2008 Service Pack 1 klar for nedlasting

Tuesday, 12 August 2008 09:19 by Christian Schiffer
christian_portrett_bw

Idag er altså den store dagen og Visual Studio 2008 Service Pack 1 Release versjon er klar for nedlasting.

Før du oppdaterer bør du kjøre Visual Studio 2008 Service Pack Preparation Tool. Deretter er det bare å gå igang å laste ned Visual Studio 2008 Service Pack 1 Release versjon og innstallere i vei. 

Installasjons prosessen tar en del tid, for meg har det tatt i overkant av en time.Jeg måtte selvsagt prøve tillegget jeg selv synes er mest interesan; nemlig ASP.NET Dynamic Data Entities Web Application og Dynamic Data Web Application. Forskjellen mellom disse er at førstnevnte bruker ADO.NET Entity Data Model som underliggende datakontekst mens sistnevnte bruker Linq to SQL.

Jeg var på NDC og så Scott Hanselman holde foredrag om dette og viste hvordan man lett kan lage skreddersydde templates for Datakontrollene man ønsker å bruke. Denne teknologien er særdeles interresant og bruker blant annet også RouteValueDictionary dvs MVC type routing. Jeg må si jeg klør i fingrene tilå leke meg med dette og håper jeg også får tid til å blogge om akkurat dette samt laste opp litt snacks til dere lesere.

Last også ned .NET Framework 3.5 Enhancements Training Kit For å lære mer om utvidelsene til .NET 3.5 rammeverket som følger med Service Pack 1. 

Til slutt vil jeg nevne at Visual Studio 2008 Service Pack 1 Release versjon er nødvendig om du vil innstallere SQL Server 2008 RTM med Visual Studio integrasjon.

Currently rated 4.2 by 5 people

  • Currently 4.2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tagger:   microsoft visual studio 2008 service pack 1, generelt
Kategorier:   Forsiden | Generelt
Handlinger:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

Linq til filsystem

Tuesday, 12 February 2008 22:19 by Christian Schiffer

christian_portrett_bw Denne gangen skal vi se på andre muligheter for LINQ. At LINQ kan brukes til database spørringer vet vi allerede og en del har fått med seg at LINQ også kan brukes mot objekter men jeg møter fremdeles overraskelse med påfølgende entusiasme hos utviklere jeg snakker med når jeg never at det også kan brukes mot filsystemet.

LINQ kan i utgangspunktet brukes mot alle collections som implementerer IQueryable interface men det kan også brukes mot enhver collection men da med visse innskrekninger som for eks sortering. Men fortvil ikke også dette kan løses med å lage en Custom Linq provider. Så langt skal vi ikke dra det denne ganegen men jeg skal bare vi et enkelt eksempel på en webapplikasjon som kjører LINQ spørring mot filsystemet og presenterer resultatet i en GridView.

Men nå ble det kveld og jeg skal skrive ferdig i morgen.

Currently rated 4.3 by 9 people

  • Currently 4.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tagger:   linq, linq til filsystem
Kategorier:   LINQ
Handlinger:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

Velkommen til MissingLinq.no

Monday, 31 December 2007 20:05 by Christian Schiffer

.NET 3.5 og C# 3.0

 christian_portrett Vi tar for oss .NET 3.5 og C# 3.0, men mest av alt blogger om LINQ vil prege denne bloggen. Følgende prosjekt er planlagt:

  • Vi begynner helt enkelt med litt basics og lager en klasse med CRUD mot SQL Server 2005.

  • Vi går videre med en enkel filbehandler for web med ajax og LINQ spørringer mot filsystemet.

  • Nå tar vi av litt og går igang med å lage en LINQ to Filesystem provider for å fullføre filbehandleren vår.

  • Så tar vi helt av og lager en Chat med WCF, AJAX/JSON og LINQ.

Som du ser blir det mye spennende her fremover så bare følg med. Bloggere til å begynne med vil være: Christian Schiffer og Einar Ingebritsen, begge fra Notus Systemer AS i Sandefjord.

Du kan allerede idag laste ned en solutionfil for en LINQ/CRUD web applikasjon i form av en zip fil her som jeg vil skrive den første artikkelen om i løpet av få dager.

Applikasjonen er allerede nå ganske godt dokumentert men pass på du har Northwind installert helst på sqlexpress, da slipper du å skrive om web.config og dbml filas connectionstring egenskaper.

For dem som måtte lure: LINQ står for Language INtegrated Query og CRUD står får Create, Read, Update og Delete, altså alle basis ting vi ønsker å gjøre med data.

Går du å venter i spenning på denne artikkelen er det bare å legge inn kommentar, jeg vil skrive den i to deler, en som en kjapp gjennomgang av teknikkene brukt og den andre som en steg for steg artikkel for dem som ikke er så kjennt med C#/.NET fra før.

Currently rated 5.0 by 4 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tagger:   forsiden, velkommen, linq
Kategorier:  
Handlinger:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

Crud, Linq til SQL del 1

Thursday, 20 December 2007 20:22 by Christian Schiffer

Jeg velger å starte med vårt forretningslag for å gå rett på sak når det gjelder LINQ Methoder og syntaks

christian_portrett Den første metode jeg vil vise er den enkleste, den henter samtlige poster fra Produkt tabellen i NorthWind eksempel databasen til Microsoft og vi får vist enkel link syntaks og metodikk.

Metoden her henter en generisk liste av typen IEnumerable<Product>. Product er autogenerert av ORM generatoren i Visual Studio 2008 når vi drar og slipper databasetabellen til en .dbml designerflate. dbml fila finnes som mal i Visual Studio 2008 Vi kommer tilbake til hvordan dette gjøre senere men jeg vil bare kort si at ORM generator har full støtte for relasjoner i databasen og genererer kode og klasser med riktig relasjonsoppsett i forhold til de tabellene vi drar og slipper inn på designeren.

Metoden vår sender også ut en streng med navnet på listen slik at vi kan bruke denne til for eksempel tittel på en webside eller en label for en visning.

public static IEnumerable<Product> GetAllProducts(
    out string DataListTitle)
{

    OrdersDataContext db = new OrdersDataContext();

    var products = from p in db.Products
                   select p;
    DataListTitle = "Alle produkter";
    return products;
}

OrdersDataContext brukes til å instansiere alle objektene i vår dbml fil deriblant Product objektet, vi lager først en ny instans av denne slik:

OrdersDataContext db = new OrdersDataContext();

Vi har nå tilgang til alle objekter, hendelser og methoder via OrdersDataContext instansen og bruker de nye SQL lignende nøkkelordene "from",  "select og "in" i neste utrykk:

var products = from p in db.Products
               select p;

Vi har nå lagt en sterkt typet variabel products som er en generisk enumerator av produkter (IEnumerable<Product>) idet Parameteret db.Products returnerer denne datatypen vet kompilatoren og intellisense at var products er av denne typen. variabelen p er også satt til typen Product, altså et enkelt produkt. Variabel p blir ikke brukt i denne omgang idet vi bare vil lese inn hele tabellen i vår products (IEnumerable<Product>) variablel.

Vi tildeler utparameteret verdien "Alle produkter":

DataListTitle = "Alle produkter";

Og returnerer til slutt vår products (IEnumerable<Product>) variablel ved å si:

return products;

Og vips vi har skrevet og forhåpentligvis forstått vår hallo verden metode i LINQ sammenheng.

På Fredag kommer forklaringen på neste metode, i mellomtiden kan du jo kose deg med en fullstendig listing av Products klassen:

using System;
using System.Linq;
using System.Collections.Generic;
using Dal;

/// <summary>
/// Ordre klassen vår fungerer som et forretningslag mellom Ordres.dbml 
/// og presentasjonslaget. Dette gir oss mulighet å styre tilgangen til 
/// databasen samt å tilrettelegge data for presentasjon og validere 
/// inndata. I dette eksempelet gjør vi ikke mye av det men følger for 
/// ordens skyld god praksis.
/// </summary>
public class Products
{
    /// <summary>
    /// Henter samtlige produkter i basen
    /// </summary>
    /// <param name="DataListTitle">En meldinggsstreng som 
    /// blir returnert i tillegg til IEnumerable[Product]</param>
    /// <returns>IEnumerable[Product]</returns>
    public static IEnumerable<Product> GetAllProducts(
        out string DataListTitle)
    {
        //Først henter vi DataContext
        OrdersDataContext db = new OrdersDataContext();
        //Vi bruker det nye nøkkelordet "var" som får sin type ved 
        //kompilering, ikke ved kjøretid og er derfor en sterkt 
        //typet variabel.
        //Her ser vi et enkelt eksempel på en LINQ select.
        //Legg merke til likheten til SQL og at du har intellisense.
        var products = from p in db.Products
                       select p;
        DataListTitle = "Alle produkter";
        return products;
    }
    /// <summary>
    /// Henter alle produkter i en kategori fra basen
    /// </summary>
    /// <param name="categoryName">Produkt kategorien 
    /// vi ønsker å filtrere på</param>
    /// <param name="DataListTitle">En meldinggsstreng som 
    /// blir returnert i tillegg til IEnumerable[Product]</param>
    /// <returns>IEnumerable[Product]</returns>
    public static IEnumerable<Product> GetProductsByCategory(
        string categoryName, 
        out string DataListTitle)
    {
        //Igjen henter vi DataContext
        OrdersDataContext db = new OrdersDataContext();

        //Vi bruker det nye nøkkelordet "var" som får sin type  
        //ved kompilering, ikke ved kjøretid og er derfor en  
        //sterkt typet variabel. Denne gangen filtrerer vi med
        //en where klausul og sorterer på Produkt Navn.        
        var products = from p in db.Products
                       where p.Category.CategoryName == 
                       categoryName

                       orderby p.ProductName
                       select p;
        DataListTitle = "Alle produkter i " + categoryName + 
            " kategorien";
        return products;
    }
    public static void Insert(
        Product product, out string DataListTitle)
    {
        OrdersDataContext db = new OrdersDataContext();
        db.Products.InsertOnSubmit(product);
        db.SubmitChanges();
        DataListTitle = "Produktet ble lagt til";
    }
    public static void Insert(
        string productName,
        decimal unitPrice,
        short unitsInStock,
        short unitsOnOrder,
        out string DataListTitle)
    {
        Product p = new Product();
        p.ProductName = productName;
        p.UnitPrice = unitPrice;
        p.UnitsInStock = unitsInStock;
        p.UnitsOnOrder = unitsOnOrder;
        p.Discontinued = false;

        Insert(p, out DataListTitle);
    }
    public static void Save(
        Product product, out string DataListTitle)
    {
        OrdersDataContext db = new OrdersDataContext();
        Product prod = 
            db.Products.Single(
            p => p.ProductID == product.ProductID);

        prod.ProductName = product.ProductName;
        prod.UnitPrice = product.UnitPrice;
        prod.UnitsInStock = product.UnitsInStock;
        prod.UnitsOnOrder = product.UnitsOnOrder;
        prod.Discontinued = product.Discontinued;
        db.SubmitChanges();
        DataListTitle = "Produktet ble oppdatert";
    }
    public static void Save(
        int productId, 
        string productName, 
        decimal unitPrice, 
        short unitsInStock,
        short unitsOnOrder, 
        bool discontinued, 
        out string DataListTitle)
    {
        OrdersDataContext db = new OrdersDataContext();
        Product p = new Product();
        p.ProductID = productId;
        p.ProductName = productName;
        p.UnitPrice = unitPrice;
        p.UnitsInStock = unitsInStock;
        p.UnitsOnOrder = unitsOnOrder;
        p.Discontinued = discontinued;

        Save(p, out DataListTitle);
    }
    /// <summary>
    /// Denne metoden sletter produktet eller merker det som
    /// discontinued. Vi viser et eksempel på en mer menigsfull 
    /// forretningslogikk i denne ene metoden for å 
    /// anskueliggjøre at dette er forretningslaget for evt.
    /// nybegynnere blandt våre lesere.
    /// </summary>
    /// <param name="productId">Produkt Id</param>
    /// <param name="DataListTitle">utdata streng</param>
    public static void Delete(
        int productId, out string DataListTitle)
    {
        OrdersDataContext db = new OrdersDataContext();
        DataListTitle = "Produktet ble slettet"; 
        Product product = 
            db.Products.Single(p => p.ProductID == productId);
        
        
        //Vi skjekker om Produktet befinner seg i en ordre  
        //før vi eventuellt sletter produktet
        if (product.Order_Details.Count <= 0)
        {
            //produktet finnes ikke i noen ordre, 
            //der er ok å slette det.
            db.Products.DeleteOnSubmit(product);
        }        
        else
        {
            //Produktet finnes i en eller flere ordrer, på grunn av
            //relasjonene mellom ordre og produkt samt av gjengse
            //regnskapsmessige årsaker kan det derfor ikke slettes.
            //Vi setter istedet Product.Discontinued til sann slik
            //at vi kan filtere produktet bort i ulike visninger.
            DataListTitle = "Produktet fantes i en ordre." +
                " Ble derfor merket som Discontinued (føres ikke)" +
                " istedet for å slettes";
            product.Discontinued = true;
        }
        //Her bruker vi strukturert unntaks håndtering som et 
        //eksempel på hvordan det kan gjøres.
        //For unntakstilfellet hvor en ordre er lagt til etter at  
        //vi skjekket om produktet eksisterte i en bestående ordre.
        try
        {
            db.SubmitChanges();            
        }
        //Vi fanger først inn den mest forventede feilkilde
        catch (System.Data.SqlClient.SqlException e)
        {
            //Vi skjekker at feilmelsingen inneholder 
            //melding som forventet
            if (e.Message.Contains(
                "The DELETE statement conflicted with the REFERENCE"))
            {
                DataListTitle = "Produktet kunne ikke slettes fordi " + 
                    "ordrer inneholder referanse til dette produktet";
            }
            else
            {
                //Feilen var likevel uforventet.
                DataListTitle = 
                    "En ukjennt feil oppsto, kontakt systemansvarlig";
            }
        }
        //Dersom et uforventet generisk unntak oppsto melder vi 
        //fra om dette via vår utdata streng og kaster et unntaket
        //videre til metoden som kallte denne methoden.
        catch (Exception e)
        { 
            DataListTitle = "En ukjennt feil oppsto";
            throw (e);
        }        
    }
}

Currently rated 5.0 by 4 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tagger:   linq, linq to sql
Kategorier:  
Handlinger:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

Missing LINQ

Sunday, 2 December 2007 07:50 by Einar Ingebrigtsen

A colleague of mine; Christian Schiffer has put up a new site with the focus on LINQ called missinglinq.no. The purpose of the site is to blog about LINQ and show examples of how to do things with LINQ.

Have a look : http://www.missinglinq.no

In addition to Christian doing some blogging, he will aggregate blogs such as mine and filter out only LINQ related articles based upon the tags.

Note : Articles will be in both Norwegian and English.

Currently rated 5.0 by 5 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tagger:   linq
Kategorier:   LINQ
Handlinger:   E-mail | del.icio.us | Permalink | Comments (1) | Comment RSSRSS comment feed

SiteEngine Copyright ©2012 Christian Schiffer
SiteEngine is an extended version of BlogEngine.NET 1.3.0.14