使用通用扩展重写IsUnicode



我正在尝试对EntityTypeConfiguration<T>这将允许我枚举T上的所有字符串属性,并为它们设置IsUnicode(false)。这是我到目前为止所做的,但我一直在尝试获取StringPropertyConfiguration,这个类的构造函数是内部的,我不知道从哪里获取它的实例

public static void SetStringsToBeNonUnicode<T>(this EntityTypeConfiguration<T> config) where T : class
{
    PropertyInfo[] properties = typeof (T).GetProperties();
    foreach (PropertyInfo p in properties)
    {
        var parameter = Expression.Parameter(typeof(T));
        var property = Expression.Property(parameter, p);
        var funcType = typeof(Func<,>).MakeGenericType(typeof(T), p.PropertyType);
        var lambda = Expression.Lambda(funcType, property, parameter);
        //This is the line where I need help
        StringPropertyConfiguration stringConfig = 
            new System.Data.Entity.ModelConfiguration.Configuration.StringPropertyConfiguration(config.Property<System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.StringPropertyConfiguration>((LambdaExpression) property));                    
        stringConfig.IsUnicode(false);
    }
}

我知道已经太晚了,但如果其他人需要:

((StringPropertyConfiguration)config.GetType().GetMethod("Property", new Type[] { lambda.GetType() }).Invoke((object)config, new object[] { lambda })).IsUnicode(false);

最新更新