我正在使用 Entity Framework 5 的 SQLite 提供程序,但它不支持 CreateDatabase,因此无法自动创建数据库。(代码优先)
有没有办法在运行时获取模型模式,以便我自己创建 SQL“CREATE TABLE”命令?
如果不是在运行时,还有其他获取模式的方法,以便我知道如何正确创建表?
谢谢!
我正在使用 Entity Framework 5 的 SQLite 提供程序,但它不支持 CreateDatabase,因此无法自动创建数据库。(代码优先)
有没有办法在运行时获取模型模式,以便我自己创建 SQL“CREATE TABLE”命令?
如果不是在运行时,还有其他获取模式的方法,以便我知道如何正确创建表?
谢谢!
A)关于获得model schema at runtime
零件
(都是我之前的帖子)
看到这个我如何以编程方式读取 EF DbContext 元数据?
这也是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