Manually editing database in code first entity framework

一曲冷凌霜 提交于 2019-12-03 12:21:45

I have had some struggles with this as well. I found that when you let EF create your database for you that a table named dbo.EdmMetadata is created and this is where/how EF tracks the state of the model. I found that if you delete this table after the database has been initially created you will put things into "manual mode" where you can now manually add/remove columns, tables, etc. from your database and EF will not throw the error that you are seeing.

If however you want to keep having EF update your database as you make changes to your model, you will need to create and call a ContextInitializer class that inherits from either DropCreateDatabaseIfModelChanges or DropCreateDatabaseAlways depending upon the behavior that you want to have happen.

change the class with the new fieldnames, delete the table "EdmMetaData" then recompile your app.

You will be responsible on modifying the fieldname on your views.

it works for me.

As I can see, there aren't really any methods built-in EF for code-first data evolution.

For what was of my initial question, the answer lies in removing the schema generation/validation. It is only then that manually editing the code and database may work.

UPDATE : EF 5.0 now support migrations

I know this has been marked as solved but in my case it didn't do the trick.

Once I deleted dbo.EdmMetadata I was getting a different error:

Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.

The way it worked for me was to remove the Initializer class from Application_Start:

void Application_Start(object sender, EventArgs e)
{
    // MyDB.SetInitializer<MyContext>(new MyInitializer());
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!