Tag Archives: dotnet

Link della settimana #1

Related Posts:

Google Code

Con un mio collega, ho iniziato a sviluppare un componente per realizzare una griglia (un gridview, per intenderci) in asp.net mvc.

Abbiamo deciso di utilizzare Google Code come server repository. Pare funzionare benissimo, tra le altre funzionalità è comodo l’avere a disposizione un server subversion.

Tuttavia è incredibile come non abbiano dato la possibilità di aggiornare più di un indirizzo mail per le modifiche applicate al codice (funzionalità, per altro, già presente in google docs da parecchio tempo)

Related Posts:

TSQL: leggere i tipi delle colonne di una tabella

Stavo ragionando sull’estender Fluent NHibernate per automatizzare il processo di produzione delle entità (sempre ammesso che non esista ancora nulla del genere).

Mi sono quindi posto il problema di come fare per leggere i tipi delle colonne di una tabella. Mi risponde Joe Webb sul suo blog:

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
   ORDINAL_POSITION
  ,COLUMN_NAME
  ,DATA_TYPE
  ,CHARACTER_MAXIMUM_LENGTH
  ,IS_NULLABLE
  ,COLUMN_DEFAULT
FROM   
  INFORMATION_SCHEMA.COLUMNS 
WHERE   
  TABLE_NAME = 'TABLE_NAME' 
ORDER BY 
  ORDINAL_POSITION ASC;

Related Posts:

Fluent NHibernate mapping exception: Association references unmapped class

Ieri ho perso metà pomeriggio di lavoro per una mia non conoscenza del mapping delle Entity in Fluent NHibernate.

L’eccezione lanciata da NHibernate:

1
Association references unmapped class: YourClass

Il mapping delle mie Entity avviene tramite un metoto CreateSessionFactory:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
FluentNHibernate.Cfg.Fluently.Configure()
  .Database
    (
      FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2008
        .ConnectionString(
          c => c.Server(DbConnectionValue.Server)
                    .Username(DbConnectionValue.User)
                    .Password(DbConnectionValue.Password)
                    .Database(DbConnectionValue.Database)
          )
        .ProxyFactoryFactory("
NHibernate.ByteCode.LinFu.ProxyFactoryFactory
,NHibernate.ByteCode.LinFu")
  )
  .Mappings
  (
    m => m.FluentMappings
.AddFromAssemblyOf<OneClass.Of.My.Repository>()
  )
  .BuildSessionFactory();

Bisogna fare attenzione che esistono 2 regole affinchè si possa correttamente caricare il mapping di Entity caricate tramite il metodo AddFromAssemblyOf:

1. dichiarare sempre public le classi di mapping;
2. definire sempre le proprietà Id;

Related Posts:

Asp.net MVC JavaScriptSerializer: non serializzare proprietà automatich

Immaginiamo di avere il seguente modello:

1
2
3
4
5
6
7
8
 
public class MyModel
{
  public string Cognome { get; set; }
  public string Nome { get; set; }
 
  public DateTime DataNascita { get; set; }
}

Immaginiamo di utilizzare questo modello per renderizzare una View. Successivamente, questa ipotetica View restituirà in post lo stesso Modello.

Una delle scelte archiettturali che si può seguire, è quella di serializzare MyModel in JSon per poi passarlo al server. Ipotizziamo, adesso, di non voler serializzare una delle proprietà di MyModel, ad esempio DataNascita. Per farlo, basta agganciare alla proprietà DataNascita, l’attributo ScriptIgnore:

1
2
3
4
5
6
7
8
9
 
public class MyModel
{
  public string Cognome { get; set; }
  public string Nome { get; set; }
 
  [ScriptIgnore]
  public DateTime DataNascita { get; set; }
}

Related Posts:

Jquery UI 1.8rc1, Jquery 1.4.1, Jquery masked input 1.2.2: datepicker bug

Recentemente ho riscontrato un bug nell’utilizzo del componente datepicker in accoppiata con il plugin masked input di query.
Quando si seleziona una data dal calendarietto associato e si cerca poi di modificarla manualmente, il sistema cancella completamente la data, costringendo l’utente ad inserirla nuovamente.

Ho aperto un ticket nella sezione dev di jquery.

Related Posts:

C#: parametri ‘Specified’ nei servizi WCF

Ipotizziamo di avere questo contratto in un servizio WCF:

1
2
[OperationContract]
string HelloWorld(string foo, int bar);

Nel caso in cui ci si agganci da client non-WCF, come ad esempio client dotnet 1.1 (o client non dotnet), ci si potrebbe trovare in una situazione come la seguente:

1
2
Service1.HelloWorld(string foo, bool fooSpecified
, int bar, bool barSpecified);

L’ultimo parametro viene aggiunto per esplicitare l’obbligatorietà del parametro int bar. Questo comportamento nasce dall’assenza dei tipi nullable (int?, bool?) nei framework dotnet pre-2.0.

Per risolvere questa problematica:
1. aggiungere l’attributo XMLSerializerFormat come contratto all’interfaccia esposta dal web service WCF;
2. aggiungere l’attributo DataContract DataMember[IsRequired=true] alla proprietà da serializzare

Related Posts:

c#: stringhe e valori enums

Ultimamente mi sono ritrovato a dover fronteggiare un problema che, in realtà, è abbastanza comune.
Immaginiamo di avere un’area generica (diciamo un div) all’interno del quale restituiamo all’utente un messaggio a seconda della specifica funzionalità che deve eseguire.

Nell’ottica del riutilizzo del codice, potrebbe essere utile cambiare il messaggio visualizzato a seconda del punto dal quale si giunge.

Per questa ragione mi son chiesto se esistesse un modo per poter associare ad un enums uno specifico valore stringa. L’enums è sicuramente utile per individuare il punto dal quale si proviene, ma da solo non è sufficientemente potente per fornire un feedback all’utente.

Mai re-inventare la ruota, quando google ti può dare una mano :)
Stefan Sedich fornisce un’ottima soluzione al mio problema.

1. Definire un nuovo attributo custom di classe;

public class StringValueAttribute : Attribute
{
	public string StringValue { get; set; }
 
	public StringValueAttribute(string value)
	{
		this.StringValue = value;
	}
}

2. Creare un extension method il cui obiettivo sarà quello di recuperare il valore stringa dell’attributo StringValue associato ai singoli enums;

public static class StringValueExtension
{
    public static string GetStringValue(this Enum value)
    {
        type = value.GetType();
        fieldInfo = type.GetField(value.ToString());
 
  	StringValueAttribute[] attribs = 
        fieldInfo.GetCustomAttributes(
	   typeof(StringValueAttribute), false) 
           as StringValueAttribute[];
 
	return attribs.Length > 0 ? attribs[0].StringValue : null;
    }
}

3. Creare un enums con associato un attributo StringValue.

public enum Test : int 
{
    [StringValue("a")]
    EnumsA = 1,
 
    [StringValue("b")]
    EnumsB = 2        
}

Related Posts:

Visual Studio 2010 RC KB980610: crash e riavvi

Se vi trovate a lavorare su un progetto con Visual Studio 2010 RC, sappiate che questa versione è affetta da un bug che porta al crash ed al conseguente riavvio, in corrispondenza di particolari eventi dell’intellisense o nel caso in cui abbiate dei device tablet connessi alla vostra macchina.

Microsoft ha già rilasciato la patch KB980610 VS10-KB980610-x86.exe su connect.microsoft.com.

(via Scott Guthrie)

Related Posts: