Pregunta

Acabo de comenzar a usar Linq to SQL y me pregunto si alguien tiene alguna práctica recomendada que pueda compartir para administrar archivos dbml.

  • ¿Cómo los mantiene actualizados con la base de datos?
  • ¿Tiene un único archivo dbml para toda la base de datos o está dividido en varias unidades lógicas?
  • ¿Cómo funciona la gestión de este archivo en un entorno de equipo?

Cualquier otro consejo o truco es bienvenido.

¿Fue útil?

Solución

¿Has mirado SqlMetal?Tiene apoyo oficial, aunque no se promociona demasiado.Puede usarlo para crear dbml desde la línea de comandos; lo hemos usado como parte de las actualizaciones continuas de integración de una base de datos (asegúrese de tener una separación de código realmente buena si hace esto; las clases parciales son un salvador), ya que el dbml obtendrá sobrescrito).

Si mal no recuerdo, no tiene las mismas características que el diseñador de modelos en Visual Studio (creo que maneja la pluralización de manera diferente).Hay un buena publicación al respecto en el blog de Ben Hall.

Otros consejos

El hecho de que el diseñador L2S no admita la sincronización con la estructura de la base de datos es, en mi opinión, una gran limitación.Sin embargo, hay un complemento disponible que proporciona algunas capacidades de resincronización:

http://www.huagati.com/dbmltools/

Lamentablemente, ya no es gratis.

Dado que solicitó otros consejos y trucos para administrar DBML...

Cuando los archivos DBML se actualizan desde la base de datos, hay ciertas configuraciones de esquema que no detectan, como los valores de columna predeterminados, lo que le obliga a cambiar la configuración manualmente.Esto puede provocar la pérdida de horas cada vez que actualiza el DBML sin darse cuenta o recordar dónde necesita realizar ajustes manuales y su código comienza a fallar.

Para protegerse contra esto, un truco consiste en escribir una prueba unitaria que utilice la reflexión para comprobar los metadatos de LINQ para esas configuraciones (manuales).Si la prueba falla, muestra un mensaje de error descriptivo que indica al usuario que realice el cambio adecuado en las propiedades de la columna.No es una solución perfecta y puede que no sea conveniente si tiene muchas configuraciones manuales, pero puede ayudar a evitar grandes problemas para usted y su equipo.

A continuación se muestra un ejemplo de una prueba nunit para verificar que una columna esté configurada para generarse automáticamente desde la base de datos.

    [Test]
    public void TestMetaData()
    {
        MyObj my_obj = new MyObj()
        {
            Foo = "bar",
        };

        Type type = MyObj.GetType();
        PropertyInfo prop = type.GetProperty("UpdatedOn");
        IEnumerable<ColumnAttribute> info = (IEnumerable<ColumnAttribute>)prop.GetCustomAttributes(typeof(ColumnAttribute), true);
        Assert.IsTrue(
            info.Any<ColumnAttribute>(x => x.IsDbGenerated == true), 
            "The DBML file needs to have MyObj.UpdatedOn AutoGenerated == true set. This must be done manually if the DBML for this table gets refreshed from the database."
        );
    }

PLINQO es un conjunto de plantillas de generación de código que generan LINQ to SQL.Admite la sincronización con la base de datos y la división de entidades en múltiples clases junto con muchas otras características que hacen que LINQ to SQL sea fácil de usar.

Consulte el sitio de PLINQO en http://www.plinqo.com así como los vídeos de introducción.

Aquí hay un enlace que proporciona buena información sobre las mejores prácticas de LINQ to SQL.

http://www.a2zmenu.com/LINQ/LINQ%20to%20SQL%20Best%20Practice.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top