管理Linq to SQL Dbml文件的最佳实践?

管理Linq to SQL Dbml文件的最佳实践?

Best Practices for Managing Linq to SQL Dbml Files?

我刚刚开始使用Linq to SQL,我想知道是否有人可以共享用于管理dbml文件的最佳实践。

  • 您如何使它们与数据库保持最新?
  • 整个数据库是否只有一个dbml文件,还是将其拆分为多个逻辑单元?
  • 在团队环境中如何管理此文件?

任何其他提示和技巧都欢迎。


您看过SqlMetal吗?它得到了官方的支持,尽管没有得到太多的提升。您可以从命令行使用它来构建dbml-我们已将其用作db持续集成更新的一部分(尽管这样做,请确保您具有很好的代码分离能力-部分类是一个救星-因为dbml会得到覆盖)。

如果我没记错的话,它没有与Visual Studio中的模型设计器完全相同的功能(我认为它对多元性的处理方式不同)。 Ben Hall的博客上有一篇很好的文章。


在我看来,L2S设计器不支持与数据库结构同步的事实是一个巨大的限制。但是,有一个加载项可提供一些重新同步功能:

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

不幸的是,它不再免费。


由于您询问了管理DBML的其他提示和技巧,因此...

从数据库刷新DBML文件时,会有某些架构设置无法使用,例如默认列值,迫使您手动更改设置。每次刷新DBML时,这可能会导致浪费时间,而没有意识到或记住您需要在何处进行手动调整,并且代码开始失败。

为了防止这种情况,一个技巧是编写一个单元测试,该单元测试使用反射来检查那些(手动)设置的LINQ元数据。如果测试失败,则会给出描述性错误消息,指示用户对列属性进行适当的更改。这不是一个完美的解决方案,如果您进行了许多手动设置,它可能也不方便,但是它可以帮助您自己和团队避免一些麻烦。

这是一个nunit测试示例,用于检查是否已将列设置为从数据库自动生成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    [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是一组生成LINQ to SQL的代码生成模板。它支持与数据库同步以及将实体分为多个类,以及使LINQ to SQL易于使用的许多其他功能。

在http://www.plinqo.com上查看PLINQO网站以及介绍视频。


这是一个提供有关LINQ到SQL最佳实践的良好信息的链接。

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


推荐阅读