管理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


推荐阅读

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux改文件权限命令?

    linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,

    linux命令交换文件名?

    linux命令交换文件名?,命令,文件,数据,名称,工具,地址,软件,系统,基础知识,

    linux下替换文件命令?

    linux下替换文件命令?,文件,一致,评论,名称,标的,资料,工作,命令,字符串,内

    linux文件nl命令?

    linux文件nl命令?,地址,工作,信息,系统,情况,标准,实时,对比,百度,命令,linux

    linux寻找文件夹命令?

    linux寻找文件夹命令?,名称,命令,文件,位置,工作,标准,目录,子目录,文件名,

    linux跳到文件尾命令?

    linux跳到文件尾命令?,系统,文件,命令,管理,状态,实时,末尾,光标,内容,编辑,l

    linux把文件复制命令?

    linux把文件复制命令?,名字,文件,软件,系统,位置,目录,命令,源文件,目标,文

    linux文件夹合并命令?

    linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数

    linux下文件创建命令?

    linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux命令行安装文件?

    linux命令行安装文件?,软件,官网,密码,中心,电脑,文件,命令,终端,指令,版本,L

    linux解压文件命令行?

    linux解压文件命令行?,系统,电脑,命令,文件,平台,名称,软件,管理,标准,目录,

    linux命令编辑文件?

    linux命令编辑文件?,系统,状态,电脑,命令,数据,标准,不了,名称,发行,网络,Lin

    linux文件乱码命令?

    linux文件乱码命令?,系统,环境,乱码,信息,状态,盘中,文件,字符集,中文,文件

    linux的删除文件命令?

    linux的删除文件命令?,名称,不了,系统,文件夹,命令,文件,环境,档案,目录,指

    linux赋值文件命令?

    linux赋值文件命令?,标准,数据,系统,状态,命令,赋值,变量,权限,文件,脚本,lin

    linux备份文件的命令?

    linux备份文件的命令?,系统,设备,网络,工具,平台,名称,备份,文件,命令,目录,l

    linux命令创建文件加?

    linux命令创建文件加?,名字,管理,系统,名称,密码,首次,命令,文件,文件夹,位