c# - How to customize name, length and value of a discriminator column with Entity Framework 6 -


i try use ef6 existing database must compatible with. database has been generated nhibernate , tables use table-per-hierarchy (tph) inheritance model.

discriminator columns named category (instead of discriminator) , have sql length of 255 (instead of 128). values different ef generate.

how can configure ef use existing columns (name, size , values)?

i tried define custom convention:

protected class discriminatorrenamingconvention : istoremodelconvention<edmproperty> {     public void apply(edmproperty property, dbmodel model)     {         if (property.name == "discriminator")         {             property.name = "category";             property.maxlength = 255;         }     } }  protected override void onmodelcreating(dbmodelbuilder modelbuilder) {     modelbuilder.entity<myentitya>().map(x => x.requires("category").hasvalue("cata"));     modelbuilder.entity<myentityb>().map(x => x.requires("category").hasvalue("catb"));     modelbuilder.conventions.add<discriminatorrenamingconvention>();     base.onmodelcreating(modelbuilder); } 

this generates column named category length of 128, whatever order of instructions in onmodelcreating method. specifying category values seems overwrite maxlength.

here

modelbuilder.entity<myentitya>().map(x => x.requires("category").hasvalue("cata")); 

you specify name of discriminator "category", this

if (property.name == "discriminator") 

will evaluate false, hence maxlength ef default.

to desired behavior, use requires("discriminator") , let convention rest.


Comments

Popular posts from this blog

python - How to insert QWidgets in the middle of a Layout? -

python - serve multiple gunicorn django instances under nginx ubuntu -

module - Prestashop displayPaymentReturn hook url -