代码之家  ›  专栏  ›  技术社区  ›  tbreffni

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

  •  33
  • tbreffni  · 技术社区  · 17 年前

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

    • 你如何让他们与数据库保持同步?
    • 整个数据库是只有一个dbml文件,还是拆分为多个逻辑单元?
    • 如何在团队环境中管理此文件?

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

    5 回复  |  直到 12 年前
        1
  •  19
  •   Gareth Jenkins    17 年前

    你看过吗 SqlMetal 它得到了官方的支持,尽管没有得到太多的推广。您可以使用它从命令行构建dbmls——我们已将其用作数据库持续集成更新的一部分(但如果您这样做,请确保代码分离良好——部分类是救星——因为dbml会被覆盖)。

    如果我没记错的话,它与Visual Studio中的模型设计器没有完全相同的功能(我认为它处理多元化的方式不同)。有一个 good post about it on Ben Hall's blog .

        2
  •  9
  •   Michael Stum    17 年前

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

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

    不幸的是,它不再免费了。

        3
  •  7
  •   Alison R.    15 年前

    既然您询问了管理DBML的其他提示和技巧。。。

    当从数据库刷新DBML文件时,有些模式设置(如默认列值)是他们不会选择的,这迫使您手动更改设置。这可能会导致每次刷新DBML时损失几个小时,而没有意识到或记住需要在哪里进行手动调整,并且代码开始失败。

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

    这是一个nunit测试的示例,用于检查列是否设置为从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."
            );
        }
    
        4
  •  6
  •   Shannon Davidson    16 年前

    PLINQO是一组生成LINQ to SQL的代码生成模板。它支持与数据库同步,将实体拆分为多个类,以及许多其他使LINQ to SQL易于使用的功能。

    请访问PLINQO网站 http://www.plinqo.com 以及介绍视频。

        5
  •  2
  •   rs.emenu    14 年前

    这里有一个链接,提供了有关LINQ to SQL最佳实践的良好信息

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