Рекомендации по управлению файлами Linq to SQL Dbml? - PullRequest
33 голосов
/ 29 августа 2008

Я только что начал использовать Linq to SQL, и мне интересно, есть ли у кого-нибудь какие-либо рекомендации по управлению файлами dbml.

  • Как вы поддерживаете их в актуальном состоянии с базой данных?
  • У вас есть один файл dbml для всей базы данных, или он разделен на несколько логических единиц?
  • Как работает управление этим файлом в командной среде?

Любые другие советы и рекомендации приветствуются.

Ответы [ 5 ]

19 голосов
/ 31 августа 2008

Вы смотрели на SqlMetal ? Это официально поддерживается, хотя и не продвигается слишком много. Вы можете использовать его для построения dbmls из командной строки - мы использовали его как часть непрерывных интеграционных обновлений db (если вы сделаете это, убедитесь, что у вас действительно хорошее разделение кода - частичные классы спасительны - как dbml получит перезаписаны).

Если я правильно помню, он не обладает теми же функциями, что и конструктор моделей в Visual Studio (я думаю, что он по-разному обрабатывает множественное число). В блоге Бена Холла есть хороший пост об этом .

9 голосов
/ 29 августа 2008

Тот факт, что разработчик L2S не поддерживает синхронизацию со структурой базы данных, является для меня огромным ограничением. Однако есть надстройка, которая обеспечивает некоторые возможности повторной синхронизации:

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

К сожалению, это больше не бесплатно.

7 голосов
/ 24 ноября 2009

Поскольку вы просили другие советы и рекомендации по управлению DBML ...

Когда файлы DBML обновляются из базы данных, существуют определенные параметры схемы, к которым они не применяются, например значения столбцов по умолчанию, вынуждающие вас вручную изменить параметр. Это может привести к потере часов каждый раз, когда вы обновляете DBML, не понимая и не помня, где вам нужно вносить ручные корректировки, и ваш код начинает давать сбой.

Чтобы избежать этого, нужно написать модульный тест, который использует отражение для проверки метаданных LINQ для этих (ручных) настроек. Если тест не пройден, он выдает описательное сообщение об ошибке, в котором пользователю предлагается внести соответствующие изменения в свойства столбца. Это не идеальное решение, и оно может быть неудобным, если у вас много ручных настроек, но это может помочь избежать серьезных неприятностей для вас и вашей команды.

Вот пример простого теста для проверки того, что столбец настроен на автоматическую генерацию из БД.

    [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."
        );
    }
6 голосов
/ 29 июля 2009

PLINQO - это набор шаблонов генерации кода, генерирующих LINQ to SQL. Он поддерживает синхронизацию с базой данных и разбиение сущностей на несколько классов, а также множество других функций, облегчающих использование LINQ to SQL.

Посетите сайт PLINQO по адресу http://www.plinqo.com, а также вступительные видеоролики.

2 голосов
/ 07 октября 2010

Вот ссылка, которая предоставляет полезную информацию о рекомендациях по LINQ to SQL

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...