linq-to-sql - studio - usando linq to sql
¿Mejores prácticas para gestionar archivos Dbml de SQL a Linux? (5)
Acabo de empezar a utilizar Linq en SQL, y me pregunto si alguien tiene alguna de las mejores prácticas que puedan 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 y trucos bienvenidos.
¿Has mirado SqlMetal ? Es oficialmente compatible, aunque no promocionado demasiado. Puede usarlo para compilar dbmls desde la línea de comandos; lo hemos usado como parte de las continuas actualizaciones de integración de un db (asegúrese de que tiene una separación de código realmente buena si lo hace, aunque las clases parciales son un salvador), ya que el dbml se obtendrá sobrescrito).
Si recuerdo correctamente, 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 una buena publicación al respecto en el blog de Ben Hall .
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
El hecho de que el diseñador L2S no admite la sincronización con la estructura de la base de datos es una gran limitación en mi mente. Sin embargo, hay un complemento disponible que proporciona algunas capacidades de resincronización:
http://www.huagati.com/dbmltools/
Desafortunadamente, ya no es gratis.
PLINQO es un conjunto de plantillas de generación de código que genera 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 videos introductorios.
Ya 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 valores de columna predeterminados, lo que le obliga a cambiar la configuración manualmente. Esto puede ocasionar 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 evitar esto, un truco es escribir una prueba unitaria que use la reflexión para verificar los metadatos LINQ para esas configuraciones (manuales). Si la prueba falla, se 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 no ser conveniente si tiene muchas configuraciones manuales, pero puede ayudar a evitar un gran dolor para usted y su equipo.
Aquí hay un ejemplo de una prueba de nunidad para verificar que una columna esté configurada para autogenerarse desde el DB.
[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."
);
}