获取模型架构以使用不支持CreateDatabase的提供程序以编程方式创建数据库

时间:2013-04-09 00:02:28

标签: entity-framework

我正在为Entity Framework 5使用SQLite提供程序,但它不支持CreateDatabase,因此无法自动创建数据库。 (代码优先)

有没有办法在运行时获取Model模式,以便我自己创建SQL“CREATE TABLE”命令?

如果不是在运行时,可以通过其他方式获取模式,以便我知道如何正确创建表?

谢谢!

1 个答案:

答案 0 :(得分:4)

A)至于获取model schema at runtime部分

(所有都是我的早期帖子)

请参阅此How I can read EF DbContext metadata programmatically?

How check by unit test that properties mark as computed in ORM model?

另一个用于自定义初始化程序Programmatic data transformation in EF5 Code First migration

说完......

我看到的问题是您实际拥有数据的位置和位置 其实我很确定你随时都无法做到这一点 因为为了能够提取该信息,您需要运行DbContext - 所以必须构建数据库等等。

在初始化程序中可能 - 但使用不同的方式获取该信息 - 上述内容不可用。

<强> B) 另一种方法是采用提供者,生成器等方式(例如this post) 这样你就可以在EF / CF本身的正确时间获得所有信息 但是我没有那么多玩过。

有关详情,请查看EF source code

到目前为止,这更像是一个“收集信息” - 以防它可以帮助您随处获取它。不是真正的解决方案。我明天会再加一些。

编辑:

要获取真实的数据库元数据,请查看其他DataSpace,这应该会将您带到正确的位置...
(注意:事情往往会从这里得到less exact - 显然没有正确的官方支持)

var ssSpaceSet = objectContext.MetadataWorkspace.GetItems<EntityContainer>(DataSpace.SSpace).First()
    .BaseEntitySets
    .First(meta => meta.ElementType.Name == "YourTableName");

如果您在调试器中查找,Table属性应具有真实的表名 但是,可能需要reflection


How I can read EF DbContext metadata programmatically?
How check by unit test that properties mark as computed in ORM model?
Programmatic data transformation in EF5 Code First migration
Entity Framework MigrationSqlGenerator for SQLite
http://entityframework.codeplex.com/
Entity Framework - Get Table name from the Entity
ef code first: get entity table name without dataannotations
Get Database Table Name from Entity Framework MetaData
http://www.codeproject.com/Articles/350135/Entity-Framework-Get-mapped-table-name-from-an-ent