Сохранение структуры БД в XML

Возникла надобность получить структуру БД и сохранить её в файл XML, не смог найти решения, . Можно ли как-нибудь через entityframework это сделать или может источник с решением есть


Ответы (1 шт):

Автор решения: Alexander Petrov

Используйте 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.

→ Ссылка