Compartir a través de


Cómo: Crear dinámicamente una base de datos (LINQ to SQL)

Las clases de entidad tienen atributos que describen la estructura de las tablas y las columnas de una base de datos relacional. Puede utilizar esta información para crear nuevas instancias de la base de datos. Al llamar al método CreateDatabase en DataContext, LINQ to SQL construye una nueva instancia de la base de datos con una estructura definida por los objetos.

Podría utilizar esta característica en cualquier escenario, sobre todo si está disponible un proveedor de datos conocido, como SQL Server Express 2005. Entre los escenarios típicos, se pueden citar los siguientes:

  • Se genera una aplicación que se instala automáticamente en un sistema del cliente.

  • Se genera una aplicación cliente que necesita que una base de datos local guarde su estado sin conexión.

    Nota:

    Es posible que los atributos de datos de su modelo de objetos no codifiquen todos los elementos de la estructura de una base de datos existente. Los atributos no representan el contenido de las funciones definidas por el usuario, los procedimientos almacenados, los desencadenadores y las restricciones CHECK. La función CreateDatabase crea una réplica de la base de datos sólo en lo que respecta a la información codificada en el modelo de objetos. Este comportamiento es suficiente para varias bases de datos.

También puede utilizar CreateDatabase con SQL Server utilizando un archivo .mdf o simplemente un nombre de catálogo, dependiendo de su cadena de conexión. LINQ to SQL utiliza la cadena de conexión para definir la base de datos que se va a crear y en qué servidor será creada.

Ejemplo

El código siguiente proporciona un ejemplo de cómo se crearía una nueva base de datos denominada MyDVDs.mdf.

Public Class MyDVDs
    Inherits DataContext
    Public DVDs As Table(Of DVD)
    Public Sub New(ByVal connection As String)
        MyBase.New(connection)
    End Sub
End Class

<Table(Name:="DVDTable")> _
Public Class DVD
    <Column(IsPrimaryKey:=True)> _
    Public Title As String
    <Column()> _
    Public Rating As String
End Class
public class MyDVDs : DataContext
{
    public Table<DVD> DVDs;
    public MyDVDs(string connection) : base(connection) { }
}

[Table(Name = "DVDTable")]
public class DVD
{
    [Column(IsPrimaryKey = true)]
    public string Title;
    [Column]
    public string Rating;
}

Puede utilizar el modelo de objetos para crear una base de datos de la manera siguiente:

Public Sub CreateDatabase()
    Dim db As New MyDVDs("c:\...\mydvds.mdf")
    db.CreateDatabase()
End Sub
public void CreateDatabase()
{
    MyDVDs db = new MyDVDs("c:\\mydvds.mdf");
    db.CreateDatabase();
}

LINQ to SQL también proporciona una API para quitar una base de datos existente antes de crear una nueva. Puede modificar el código del escenario 1 (incluido anteriormente en este documento) para comprobar primero si existe alguna otra versión de la base de datos. Utilice los métodos DatabaseExists y DeleteDatabase para implementar este enfoque. Después de llamar a CreateDatabase, se habrá creado la nueva base de datos y aceptará las consultas y comandos habituales.

Puede implementar este enfoque utilizando código como el siguiente:

Public Sub CreateDatabase2()
    Dim db As MyDVDs = New MyDVDs("c:\...\mydvds.mdf")
    If db.DatabaseExists() Then
        Console.WriteLine("Deleting old database...")
        db.DeleteDatabase()
    End If
    db.CreateDatabase()
End Sub
public void CreateDatabase2()
{
    MyDVDs db = new MyDVDs(@"c:\mydvds.mdf");
    if (db.DatabaseExists())
    {
        Console.WriteLine("Deleting old database...");
        db.DeleteDatabase();
    }
    db.CreateDatabase();
}

Vea también

Conceptos

Información general (LINQ to SQL)

Crear y enviar cambios en los datos (LINQ to SQL)