Get Model schema to programmatically create database using a provider that doesn't support CreateDatabase

后端 未结 1 1711
星月不相逢
星月不相逢 2020-12-21 12:51

I\'m using the SQLite provider for Entity Framework 5 but it doesn\'t support CreateDatabase and thus cannot auto create the database. (Code First)

Is there a way I

相关标签:
1条回答
  • 2020-12-21 13:03

    A) As for obtaining the model schema at runtime part

    (all are earlier posts of mine)

    See this one How I can read EF DbContext metadata programmatically?

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

    Also this one for a custom initializer Programmatic data transformation in EF5 Code First migration

    Having said that...

    The problem I see is where and at what point you actually have the data available.
    Actually I'm quite sure you won't be able to do that at any time.
    Because to be able to extract that info you need to have a DbContext running - so db has to be constructed etc. etc.

    In the initializer maybe - but using different ways to get that info - the above is not available.

    B) The other way would be to go the way of implementing a provider, generator etc. (e.g. this post).
    That way you should get all that info just at the right time from the EF/CF itself.
    However I haven't played with that much.

    For more info you can check the EF source code

    This is more of a 'gathered info' so far - in case it helps you get anywhere with it. Not really a solution. I'll add some more tomorrow.

    EDIT:

    To get the real database metadata, look into the other DataSpace, this should get you to the right place...
    (note: things tend to get less exact from here - as obviously there isn't the right official support)

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

    If you look up in debugger, Table property should have the real table name.
    However, reflection might be required.


    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

    0 讨论(0)
提交回复
热议问题