Лучшие методы управления файлами LINQ в SQL DBML?

StackOverflow https://stackoverflow.com/questions/33664

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Любые другие советы и хитрости приветствуются.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Поскольку вы попросили другие советы и хитрости по управлению 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."
        );
    }

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

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

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

http://www.a2zmenu.com/linq/linq%20to%20sql%20best%20practice.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top