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

Linq to sql 管理Linq到SQL Dbml文件的最佳实践?,linq-to-sql,Linq To Sql,我刚刚开始使用LINQtoSQL,我想知道是否有人可以分享管理dbml文件的最佳实践 如何使它们与数据库保持最新 整个数据库是否只有一个dbml文件,还是将其拆分为多个逻辑单元 在团队环境中如何管理此文件 欢迎使用任何其他提示和技巧。L2S设计器不支持与数据库结构同步的事实在我看来是一个巨大的限制。但是,有一个附加模块提供了一些重新同步功能: 不幸的是,它不再是免费的。你看过吗?它得到了官方的支持,尽管没有得到太多的推广。您可以使用它从命令行构建dbml—我们已经将其作为db持续集成更新的

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

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

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

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

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

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


如果我没记错的话,它与VisualStudio中的模型设计器没有完全相同的特性(我认为它处理多元化的方式不同)。PLINQO是一组生成LINQ到SQL的代码生成模板。它支持与数据库同步,并将实体拆分为多个类,以及使LINQ to SQL易于使用的许多其他功能


请访问PLINQO网站以及介绍视频。

因为您询问了管理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."
        );
    }
[测试]
公共void TestMetaData()
{
MyObj my_obj=新的MyObj()
{
Foo=“bar”,
};
Type Type=MyObj.GetType();
PropertyInfo prop=type.GetProperty(“UpdateOn”);
IEnumerable info=(IEnumerable)prop.GetCustomAttributes(typeof(ColumnAttribute),true);
阿塞特·伊斯特鲁(
info.Any(x=>x.IsDbGenerated==true),
“DBML文件需要设置MyObj.UpdatedOn AutoGenerated==true。如果从数据库刷新此表的DBML,则必须手动执行此操作。”
);
}

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

复制:,