ModelsBuilder: best way to get property alias from generated models
At the moment, the best way to get a property alias based on a generated model is to use
var propertyType = ModelClassName.GetModelPropertyType(d => d.PropertyName);
var alias = propertyType.PropertyTypeAlias;
Getting the alias like this allows you to not depend on magic strings in many cases, for example when calling IContent.SetValue().
I've tried to come up with a general solution for this, so I first created a new method on each partial class that extends a generated model. Given that large solutions can contain many model classes however, I thought a more appropriate solution could be found.
After spending some time on this, I realised that any reusable code would have to be put in the base class that all generated models inherit from, which of course I couldn't extend.
In the process of reviewing the code for this on GitHub, I also realised that the GetModelPropertyType() method call is hitting the database, which in my opinion isn't ideal.
Does anyone have any suggestions about how this can be done in a better way?
I've thought about using Reflection to read the property attributes, but a more robust solution would be for the generated models to add one constant per property, for example:
public const string BodyTextPropertyAlias = "bodyText";
[ImplementPropertyType(BodyTextPropertyAlias)]
public IHtmlString BodyText
{
get { return this.GetPropertyValue<IHtmlString>(BodyTextPropertyAlias); }
}
as they do now for the model class:
public new const string ModelTypeAlias = "documentTypeAlias";
which however seems like something that the ModelsBuilder would have to take care of.
ModelsBuilder: best way to get property alias from generated models
At the moment, the best way to get a property alias based on a generated model is to use
Getting the alias like this allows you to not depend on magic strings in many cases, for example when calling
IContent.SetValue()
.I've tried to come up with a general solution for this, so I first created a new method on each partial class that extends a generated model. Given that large solutions can contain many model classes however, I thought a more appropriate solution could be found.
After spending some time on this, I realised that any reusable code would have to be put in the base class that all generated models inherit from, which of course I couldn't extend.
In the process of reviewing the code for this on GitHub, I also realised that the
GetModelPropertyType()
method call is hitting the database, which in my opinion isn't ideal.Does anyone have any suggestions about how this can be done in a better way?
I've thought about using Reflection to read the property attributes, but a more robust solution would be for the generated models to add one constant per property, for example:
as they do now for the model class:
which however seems like something that the
ModelsBuilder
would have to take care of.is working on a reply...