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

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

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

    我刚开始使用linq-to-sql,我想知道是否有人有任何可以共享的管理DBML文件的最佳实践。

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

    欢迎使用其他提示和技巧。

    5 回复  |  直到 11 年前
        1
  •  19
  •   Gareth Jenkins    16 年前

    你看过吗 SqlMetal ?它得到了官方的支持,虽然升职不多。您可以使用它从命令行构建DBML—我们已经将它用作数据库持续集成更新的一部分(但是,如果这样做的话,请确保您有很好的代码分离—部分类是一个救世主—因为DBML将被覆盖)。

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

        2
  •  9
  •   Michael Stum    16 年前

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

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

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

        3
  •  7
  •   Alison R.    15 年前

    既然你要求其他管理DBML的技巧和技巧…

    当从数据库刷新DBML文件时,有一些模式设置是它们无法接受的,例如默认列值,这迫使您手动更改设置。每次刷新DBML时,如果不知道或不记得需要在哪里进行手动调整,这可能会导致时间损失,并且代码开始出现故障。

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

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

        [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    15 年前

    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