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