c# - How to configure property in Entity Framework with Type and PropertyInfo -


if had simple class this

class person {     public int id { get; set; }     // ... } 

and wanted "do something" in ef onmodelcreating id property, such as:

modelbuilder.entity<person>().property( _p => _p.id ).hasdatabasegeneratedoption( databasegeneratedoption.none ); 

i have no problem. however, when have type , property:

var entitytype = typeof(person); var propinfo = entitytype.getproperty("id"); 

i want function such

modelentityproperty( modelbuilder, propertytype, entitytype).hasdatabasegeneratedoption( databasegeneratedoption.none ); 

my question: entityframework allow 1 configure entities/properties using reflection information? or exclusively using these lambdaexpressions?

i ended writing function, long , in opinion uglier may available:

private primitivepropertyconfiguration modelentityproperty(      dbmodelbuilder p_model,      propertyinfo p_propinfo,      type p_entitytype = null ) {     // if entitytype not set, use property's declaring type     var entitytype = (p_entitytype == null) ? p_propinfo.declaringtype : p_entitytype;      // entity <> method- generic method     var genericentitymethod = typeof( dbmodelbuilder ).getmethod( "entity", new type[0] );      // actual method type we're interested in     var entitymethod = genericentitymethod.makegenericmethod( new type[] { entitytype } );      // return value of .entity{p_type}()     var theentityconfigurator = entitymethod.invoke( p_model, new object[0] );       // don't this, works (for now, until change something)     var propmethod = theentityconfigurator         .gettype()         .getmethods( bindingflags.flattenhierarchy | bindingflags.instance | bindingflags.public )         .where( _mi => _mi.name == "property" && _mi.isgenericmethod )         .first()         .makegenericmethod( p_propinfo.propertytype );     // whole ugly mess should have been getmethod call, don't know how     // set parameter type make sure correct version of method     // returned unambiguously      // build expression used identify property     var paramexpr = expression.parameter( entitytype );     var memberexpr = expression.makememberaccess( paramexpr, p_propinfo );     var lambdaexpr = expression.lambda( memberexpr, paramexpr );      // invoke correct version of property method correct parameter     var thepropertyconfiguration = propmethod.invoke(          theentityconfigurator,          new object[] { lambdaexpr } );      // , return thing     return thepropertyconfiguration primitivepropertyconfiguration; } 

this function works example, needs more general (e.g. datetimes, etc. don't work). there better or more elegant way of doing "natively" within ef? or appropriate method, assuming fixed various valuetypes "property" method can handle?


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -