Procedimiento para crear dinámicamente una base de datos
En LINQ to SQL, se asigna un modelo de objetos a una base de datos relacional. La asignación se habilita mediante una asignación basada en atributos o mediante un archivo de asignación externo para describir la estructura de la base de datos relacional. En ambos escenarios, hay información suficiente sobre la base de datos relacional para crear una instancia nueva de la base de datos mediante el método DataContext.CreateDatabase.
El método DataContext.CreateDatabase crea una réplica de la base de datos solo en lo que respecta a la información codificada en el modelo de objetos. Es posible que los atributos y los archivos de asignación del modelo de objetos no codifiquen todos los elementos de la estructura de una base de datos existente. La información de asignación no representa el contenido de las funciones definidas por el usuario, los procedimientos almacenados, los desencadenadores y las restricciones CHECK. Este comportamiento es suficiente para varias bases de datos.
Podría utilizar el método DataContext.CreateDatabase en cualquier escenario, especialmente si está disponible un proveedor de datos conocido, como Microsoft SQL Server 2008. Entre los escenarios típicos, se pueden citar los siguientes:
Se crea una aplicación que se instala automáticamente en un sistema del cliente.
Se crea una aplicación cliente que necesita que una base de datos local guarde su estado sin conexión.
También puede utilizar el método DataContext.CreateDatabase con SQL Server mediante un archivo .mdf o un nombre del 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 se va a crear.
Nota
Siempre que sea posible, utilice Windows Integrated Security para conectar con la base de datos, de modo que no se requieran contraseñas en la cadena de conexión.
Ejemplo 1
El código siguiente proporciona un ejemplo de cómo se crearía una nueva base de datos denominada MyDVDs.mdf.
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;
}
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
Ejemplo 2
Puede utilizar el modelo de objetos para crear una base de datos de la manera siguiente:
public void CreateDatabase()
{
MyDVDs db = new MyDVDs("c:\\mydvds.mdf");
db.CreateDatabase();
}
Public Sub CreateDatabase()
Dim db As New MyDVDs("c:\...\mydvds.mdf")
db.CreateDatabase()
End Sub
Ejemplo 3
Cuando crees una aplicación que se instale automáticamente en un sistema de un cliente, comprueba si la base de datos existe y quítala antes de crear una nueva. La clase DataContext proporciona los métodos DatabaseExists y DeleteDatabase para ayudarle en este proceso.
En el ejemplo siguiente se muestra una manera de usar estos métodos para implementar este enfoque:
public void CreateDatabase2()
{
MyDVDs db = new MyDVDs(@"c:\mydvds.mdf");
if (db.DatabaseExists())
{
Console.WriteLine("Deleting old database...");
db.DeleteDatabase();
}
db.CreateDatabase();
}
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