Melhores Práticas para o Gerenciamento de Linq to SQL Dbml Arquivos?
-
09-06-2019 - |
Pergunta
Eu só comecei a usar o Linq to SQL, e eu estou querendo saber se alguém tem qualquer melhores práticas que eles podem compartilhar para o gerenciamento de dbml arquivos.
- Como você se manter atualizado com o banco de dados?
- Você tem um único dbml arquivo para o banco de dados inteiro, ou é dividida em várias unidades lógicas?
- Como gerenciar este arquivo de trabalho em um ambiente de equipe?
Quaisquer outras dicas e truques de boas-vindas.
Solução
Você olhou para SqlMetal?É suportado oficialmente, apesar de não ser promovido demais.Você pode usá-lo para construir dbmls a partir da linha de comando, usamos isso como parte de um banco de dados contínua integração atualizações (certifique-se de que você tem realmente uma boa separação de código se você fizer isso embora - classes parciais são salvador - como o dbml serão sobrescritos).
Se bem me lembro ele não tem as mesmas características que o modelo de designer no Visual Studio (eu acho que ele lida com pluralisation de forma diferente).Há um bom post sobre isso no Ben Hall do blog.
Outras dicas
O fato de que o L2S designer não suporta a sincronização com a estrutura de banco de dados é uma grande limitação na minha mente.No entanto, há um add-in disponível que fornece algumas re-capacidades de sincronização:
http://www.huagati.com/dbmltools/
Infelizmente, ele não é mais livre.
Já que você perguntou para outras dicas e truques para o gerenciamento de DBML...
Quando DBML arquivos são atualizados a partir do banco de dados, há certas configurações de esquema que eles não pegar, tais como valores de coluna padrão, obrigando-o a alterar manualmente a configuração.Isso pode levar à perda de horas a cada vez que você atualizar o DBML sem perceber ou lembrar-se de onde você precisará fazer ajustes manuais, e o código começa a falhar.
Para se proteger contra isso, um truque é escrever um teste de unidade que utiliza a reflexão para verificar o LINQ metadados para aqueles (manual) das configurações.Se o teste falhar, ele dá uma mensagem de erro descritiva, instruindo o usuário faça a devida alteração na coluna propriedades.Não é uma solução perfeita, e ele pode não ser conveniente se você tem muitas configurações manuais, mas pode ajudar a evitar alguns dos principais dor para si e para a sua equipa.
Aqui está um exemplo de um nunit teste para verificar se uma coluna é definida para auto-gerar a partir do 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."
);
}
PLINQO é um conjunto de código de modelos de geração de geração de LINQ to SQL.Ele suporta a sincronização com o banco de dados e a divisão de entidades em várias classes, juntamente com muitos outros recursos que fazem do LINQ to SQL fácil de usar.
Confira o PLINQO site http://www.plinqo.com bem como a introdução de vídeos.
Aqui está um link que fornece boas informações sobre o LINQ to SQL melhores práticas
http://www.a2zmenu.com/LINQ/LINQ%20to%20SQL%20Best%20Practice.aspx