有没有办法在运行时获取Model模式,以便我自己创建sql“CREATE TABLE”命令?
如果不是在运行时,以其他方式获取模式,那么我知道如何正确创建表?
谢谢!
解决方法
(都是我早先的帖子)
见这个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 – 因此必须构造db等.
在初始化程序中可能 – 但使用不同的方式来获取该信息 – 上述内容不可用.
B)
另一种方式是实现提供者,生成器等(例如this post).
这样你就可以在EF / CF本身的正确时间获得所有信息.
但是我没有那么多玩过.
有关详细信息,请查看EF source code
到目前为止,这更像是一个“收集的信息” – 以防它可以帮助您随处获得它.不是真正的解决方案.我明天再补充一些.
编辑:
要获得真正的数据库元数据,请查看其他DataSpace,这应该可以帮助您到达正确的位置…
(注意:从这里开始的事情往往不太准确 – 显然没有正确的官方支持)
var ssSpaceSet = objectContext.MetadataWorkspace.GetItems<EntityContainer>(DataSpace.SSpace).First() .BaseEntitySets .First(Meta => Meta.ElementType.Name == "YourTableName");
如果在调试器中查找,Table属性应该具有实际的表名.
但是,可能需要反思.
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