Creare un applicazione utilizzando Linq to Sql - parte prima -

di Marco Leoncini, in asp.net,

il nuovo VisualStudio è ormai alle porte, seguito fedelmente dal fido Linq e dal prode C# 3.
In questo Post e alcuni seguenti andrò a narrare, come (secondo me) andare a realizzare un DataLayer, BusinessLayer e UI utilizzando Ling To Sql.
saranno Post Sintetici, che rispecchiano, ultimamente, la mia poca propensione di parlare.

tutto il codice che segue è stato scritto utilizzando la Beta 1 di Orcas, appena la Beta 2 sarà disponibile vedremo le differenze.

ma partiamo con qualcosa che sicuramente non varierà, una nuova sezione di configurazione con la quale specificheremo il file XML utilizzato per mappare le colonne del db alle proprietà delle nostre entità, e infine l'immancabile stringa di connessione.

Ling To Sql offre due approcci alla mappatura l'AttributeMappingSource e XmlMappingSource , ambedue ereditano dalla classe astratta MappingSource, il primo mappa la nostra tabella all'entità utilizzando l'attributi, è quindi necessario decorare le nostre classi compreso ogni suo metodo/proprietà, il secondo (e ultimo) utilizza invece un file xml, non è quindi necessario nessun (o quasi) intervento sulle nostre entità.

quindi creiamo un nuovo progetto C# e aggiungiamo una nuova classe che erediti da ConfigurationSection, per realizzare la nuova sezione di configurazione utilizzeremo l'approccio Dichiarativo, molto più rapito per lo sviluppo:

using System;
using System.Configuration;
using TheSimpleBeach.Common;
using System.Web;


namespace TheSimpleBeach.Setting
{
public class SimpleBeachSettings : ConfigurationSection, ISettings
{
private static SimpleBeachSettings _settings;
private static object _sinkLock = new object();

static public ISettings GetCurrent()
{
if (_settings == null)
{
try
{
lock (_sinkLock)
{
if (_settings == null)
{

_settings = ConfigurationManager.GetSection("SimpleBeachSettings") as SimpleBeachSettings;

}
}
}
catch (Exception ex)
{
throw new SimpleBeachSettingException("", ex);
} 
}
if (_settings == null)
{
throw new SimpleBeachNullSettingException("");
}

return _settings;
}


[ConfigurationProperty("ConnectionString", IsRequired = true)]
public string ConnectionString
{
get
{
return (string)this["ConnectionString"];
}
set
{
this["ConnectionString"] = value;
}
}

[ConfigurationProperty("MappingSourcePath", IsRequired = true)]
public string MappingSourcePath
{
get 
{
HttpContext _context = HttpContext.Current;

if (_context != null)
{
return _context.Server.MapPath((string)this["MappingSourcePath"]);
}
else
{
return (string)this["MappingSourcePath"];
}
}
set 
{

this["MappingSourcePath"] = value;
}
}

#region ISettings Members

string ISettings.ConnectionString
{
get { return ConnectionString; }
}

string ISettings.MappingSourcePath
{
get { return MappingSourcePath; }
}

#endregion
}


}

la nuova classe implementa l'iterfaccia ISettings, definita nell'assembly TheSimpleBeach.Common, per adesso il suo utilizzo è limitato.
la firma dell'interfaccia definisce due proprietà, ConnectionString e MappimgSourcePath del tipo stringa.

creiamo inoltre due classi personalizzate per sollevare eccezioni custom

using System;
using System.Collections.Generic;
using System.Text;

namespace TheSimpleBeach.Setting
{
public class SimpleBeachSettingException : Exception
{
public SimpleBeachSettingException(string message, Exception innerException) :base(message,innerException){ }
}

public class SimpleBeachNullSettingException : Exception
{
public SimpleBeachNullSettingException(string message) : base(message) { }

}
}

fine prima parte

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese