Linq en Orcas Beta 1

Estoy probando una máquina virtual con Orcas Beta 1 instalada, la versión por venir del Visual Studio 9. En otro “post” enumeraremos las principales novedades, pero hoy quería concentrarme en mostrar un pequeño gran paso que trae incorporado. (código de este ejemplo en Dbml1.zip)

Los que vieron LINQ, como tecnología Microsoft de mapeo objeto a relacional (o similar), recordaran que había un utilitario, de comando de línea, SQLMetal, que generaba código para realizar ese mapeo. Ahora, el SQLMetal sigue vivo, y seguirá un tiempo (me gustaría saber si está el código disponible), pero, siguiendo la idea de hacer todo desde el Visual Studio, la versión Orcas provee un nuevo tipo de item: Linq to SQL.

En el ejemplo, se puede arrastrar tablas desde una conexión de datos SQL Server, y luego aparecen en el nuevo diseñador (en este caso, usando un base de un Hands On Lab de Orcas Beta 1, sobre una base de datos similar a la de DinnerNow, con restaurantes, menús, e items de menús):

 

Por debajo, en un archivo de código producido automáticamente por el “designer” (jeje… vieron la luz, la generación de código… hace años que la gente de Redmond va agregando cada vez más este tipo de utilitarios dentro del VS… ), queda en este caso, un DinnerNowDataContext:

public partial class DinnerNowDataContext : global::System.Data.Linq.DataContext {


   [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public DinnerNowDataContext(string connection) :
       base(connection) {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public DinnerNowDataContext(global::System.Data.IDbConnection connection) :
       base(connection) {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public DinnerNowDataContext() : 
   base (global::DbmlLibrary1.Properties.Settings.Default.DinnerNowOrcasLabsConnectionString)    {
}
    public global::System.Data.Linq.Table<Menu> Menus {
     get {
        return this.GetTable<Menu>();
     }
    }

    public global::System.Data.Linq.Table<RestaurantCategory> RestaurantCategories {
     get {
        return this.GetTable<RestaurantCategory>();
     }
    }

….

 

de manera similar a como lo generaba el utilitario SQLMetal. Como antes, define “business entities” que son las clases que corresponden a las tablas de la base, como ejemplo:

 

[global::System.Data.Linq.Table(Name="dbo.Menu")]
public partial class Menu : global::System.Data.Linq.INotifyPropertyChanging, global::System.ComponentModel.INotifyPropertyChanged {
    private global::System.Guid _MenuId;
    private global::System.Nullable<global::System.Guid> _MenuTypeId;
    private global::System.Guid _RestaurantId;
    private global::System.DateTime _StartDate;
    private global::System.DateTime _EndDate;
    private global::System.Data.Linq.EntitySet<MenuItem> _MenuItems;
    private global::System.Data.Linq.EntityRef<MenuType> _MenuType;
    private global::System.Data.Linq.EntityRef<Restaurant> _Restaurant;

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public Menu() {
        this._MenuItems = new global::System.Data.Linq.EntitySet<MenuItem>(new global::System.Action<MenuItem>(this.Attach_MenuItems), new global::System.Action<MenuItem>(this.Detach_MenuItems));
        this._MenuType = default(global::System.Data.Linq.EntityRef<MenuType>);
        this._Restaurant = default(global::System.Data.Linq.EntityRef<Restaurant>);
    }

    [global::System.Data.Linq.Column(Storage="_MenuId", Name="MenuId", DBType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, CanBeNull=false)]
     public global::System.Guid MenuId {
        get {
           return this._MenuId;
        }
        set {
           if ((this._MenuId != value)) {
              this.OnPropertyChanging(“MenuId”);
              this._MenuId = value;
              this.OnPropertyChanged(“MenuId”);
           }
        }
     }

Veremos hasta donde llega la adopción de LINQ, y el soporte que consiga en otras bases de datos.

Gracias a la gente de Southworks por la máquina virtual.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

This entry was posted in 1389. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>