Notición.
Mono ya incorpora el Entity Framework.
Ya hace días que ha sido noticia, pero los señores de Microsoft me han sorprendido muy gratamente al mismo tiempo que me han dejado un poco perplejo. Perplejo porque no entiendo como es que Microsoft halla liberado una de las que considero yo sus joyas de su corona.
Mi código se basa mucho en el Entity Framework. De hecho fue el motor que permtió arrancar rápidamente con todo esto al hacerme olvidar toda la complejidad que suponía la conexión a una base de datos. Tal es mi dependencia y el que hasta ahora no estuviera disponible como código libre que ya tenía en mente que quizás en un futuro necesitase crearme algún tipo de librería que abstrayera mi conexión a las bases de datos de una forma simple.
Nhibernate nunca me gustó y que ahora ya hallan noticias de que los desarrolladores de Mono ya puedan mirarse el Entity Framework pues, la verdad, es una buena noticia.
Esto es una consideración importante para permitir un traspaso de base de datos a MSSQL a mySQL lo menos problemático posible, en un futuro.
Las nombre de las bases de datos crearlos en MSSQL utilizando solo minúsculas.
Resulta que al MySQL, por lo menos en Windows, por defecto los nombres de las tablas y bases de datos son en minúsculas, por lo que si se decide portar la base de datos de MSSQL a mySQL perderemos todos estos valores, con la consiguiente revisión de código que se va a tener que realizar si hacemos el traspaso. Mejor utilizar minúsculas y si queremos guiones bajos.
De momento no se que pasará el día que nos vayamos a Linux, pero el cifostio podría ser importante.
var lista = listaDuplicados.Distinct();
Aquí:
http://www.csharpcity.com/sqlite-ado-net-c-4-0/
Simplemente añadir esto en config.file:
<startup useLegacyV2RuntimeActivationPolicy=”true”> … </startup>
Interesante receta de como instalar Mono desde las fuentes en Ubuntu 10.04:
http://pjsmith.me.uk/index.php/2011/08/installing-mono-2-10-x-on-ubuntu-10-4lts/
Se podría hacer limpiando uno a uno cada uno de los textBoxes con textBox.Text = String.Empty, pero si hay muchos es mejor tirar de esto:
protected void buttonLimpiar_Click(object sender, EventArgs e)
{
List<Control> listaTextBoxes = new List<Control>();
foreach (Control ctrl in form1.Controls)
{
if (ctrl is TextBox) listaTextBoxes.Add(ctrl);
}
foreach (TextBox textBox in listaTextBoxes) textBox.Text = String.Empty;
}
La única condición es asiganr el tabIndex correcto a cada uno de los textBox:
private List<Control> listaTextBoxes;
private void FichaCliente_Load(object sender, EventArgs e)
{
listaTextBoxes = new List<Control>();
CargarListaTextBoxes(this);
listaTextBoxes = (from c in listaTextBoxes
orderby c.TabIndex
select c).ToList();
}
private void CargarListaTextBoxes(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c is TextBox)
{
listaTextBoxes.Add(c);
}
if (c.Controls.Count > 0)
{
CargarListaTextBoxes(c);
}
}
}
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
string c = this.ActiveControl.Name;
int i = 0;
foreach (Control ctrl in listaTextBoxes)
{
if (ctrl.Name == c) break;
++i;
}
if(i < listaTextBoxes.Count -1) listaTextBoxes[i + 1].Focus();
}
}
Any question, let me know.