Сохранение структуры БД в XML
Возникла надобность получить структуру БД и сохранить её в файл XML, не смог найти решения, . Можно ли как-нибудь через entityframework это сделать или может источник с решением есть
Ответы (1 шт):
Используйте INFORMATION_SCHEMA - это стандарт ANSI, набор вьюх с информацией о базе данных. Обычными sql-запросами извлекаете нужную информацию.
Ваша задача решается простейшим кодом.
private string _connectionString = @"...";
string sql = "select * from INFORMATION_SCHEMA.TABLES for xml auto";
using var conn = new SqlConnection(_connectionString);
conn.Open();
using var cmd = new SqlCommand(sql, conn);
string resultXml = (string)cmd.ExecuteScalar();
Console.WriteLine(resultXml);
File.WriteAllText("db schema.xml", resultXml);
Тут главная сложность написать sql-запрос, который будет возвращать необходимые данные.
Entity Framework тут ничем не поможет. Для его использования придётся создать набор классов, совпадающий с INFORMATION_SCHEMA. Это возможно, но вряд ли оправданно.
Для чего вы сохраняете схему? Вероятно, для того, чтобы по ней можно было воспроизвести новую БД с аналогичной структурой.
Вы постоянно упоминаете Entity Framework в своих вопросах, значит работаете именно с ним. Значит, нужно просто использовать миграции. Они как раз и предназначены для того, чтобы воспроизводить структуру БД.
Файлы миграций уже хранятся в вашем проекте, так что никаких дополнительных действий не нужно.
Когда нужно воспроизвести БД с аналогичной структурой на другом компьютере, то применяют миграции: Applying Migrations.
Недавно был введён новый способ с помощью бандлов: Introducing DevOps-friendly EF Core Migration Bundles.