Схема Get Model для программного создания базы данных с использованием поставщика, который не поддерживает CreateDatabase
Я использую провайдер SQLite для Entity Framework 5, но он не поддерживает CreateDatabase и, следовательно, не может автоматически создавать базу данных. (Код первый)
Есть ли способ получить схему модели во время выполнения, чтобы я мог сам создать команду SQL "CREATE TABLE"?
Если нет во время выполнения, каким-то другим способом получить схему, чтобы я знал, как правильно создать таблицу?
Спасибо!
1 ответ
А) Что касается получения model schema at runtime
часть
(все мои предыдущие посты)
Посмотрите это Как я могу программно читать метаданные EF DbContext?
И как проверить модульным тестом, что свойства помечены как вычисленные в модели ORM?
Также этот для пользовательского инициализатора. Программное преобразование данных в EF5 Code First.
Было сказано, что...
Проблема, которую я вижу, состоит в том, где и в какой момент у вас действительно есть данные.
На самом деле я совершенно уверен, что вы не сможете сделать это в любое время.
Потому что для того, чтобы извлечь эту информацию, вам нужно иметь DbContext
работает - так дБ должно быть построено и т. д.
В инициализаторе может быть - но с использованием различных способов получить эту информацию - вышеупомянутое не доступно.
Б) Другой путь - это внедрение поставщика, генератора и т. Д. (Например, этот пост).
Таким образом, вы должны получить всю эту информацию в нужное время от самого EF/CF.
Однако я не так много играл.
Для получения дополнительной информации вы можете проверить исходный код EF
Пока что это скорее "собранная информация" - на случай, если она поможет вам с ней что-то получить. Не совсем решение. Я добавлю еще немного завтра.
РЕДАКТИРОВАТЬ:
Чтобы получить реальные метаданные базы данных, посмотрите на другие DataSpace
, это должно привести вас в нужное место...
(примечание: вещи стремятся получить less exact
отсюда - как, очевидно, нет правильной официальной поддержки)
var ssSpaceSet = objectContext.MetadataWorkspace.GetItems<EntityContainer>(DataSpace.SSpace).First()
.BaseEntitySets
.First(meta => meta.ElementType.Name == "YourTableName");
Если вы посмотрите в отладчике, Table
свойство должно иметь реальное имя таблицы.
Тем не мение, reflection
может потребоваться
Как программно читать метаданные EF DbContext?
Как проверить модульным тестом, что свойства помечены как вычисленные в модели ORM?
Программное преобразование данных в EF5 Code Первая миграция
Entity Framework MigrationSqlGenerator для SQLite
http://entityframework.codeplex.com/
Entity Framework - Получить имя таблицы от Entity
ef code first: получить имя таблицы сущностей без dataannotations
Получить имя таблицы базы данных из метаданных Entity Framework
http://www.codeproject.com/Articles/350135/Entity-Framework-Get-mapped-table-name-from-an-ent