2

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

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

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

谢谢!

4

1 回答 1

4

A)关于获得model schema at runtime零件

(都是我之前的帖子)

看到这个我如何以编程方式读取 EF DbContext 元数据?

以及如何通过单元测试检查属性标记为在 ORM 模型中计算?

这也是EF5 Code First 迁移中的自定义初始化程序编程数据转换

话说回来...

我看到的问题是您在何处以及在什么时候实际拥有可用数据
实际上,我很确定您在任何时候都无法做到这一点。
因为要能够提取该信息,您需要DbContext运行 - 所以必须构建数据库等等。

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

B) 另一种方法是采用实现提供者、生成器等的方式(例如这篇文章)。
这样,您应该在正确的时间从 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 First 迁移中的编程数据转换
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

于 2013-04-09T01:27:41.360 回答