Подтвердить что ты не робот

Рекомендации по управлению файлами Linq to SQL Dbml?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

К сожалению, он больше не свободен.

Ответ 3

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

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

Чтобы избежать этого, один трюк состоит в том, чтобы написать unit test, который использует отражение, чтобы проверить метаданные 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

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

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