Я собираюсь предположить, что вы используете базу данных mysql (или другую) в контейнере, а не на внешнем томе - если это так, вам не следует этого делать.
Вам нужно будет либо использовать базу данных, которая не работает в вашем контейнере, т.е. на отдельном сервере, либо создать том, внешний по отношению к образу докера, и по-прежнему запускать программное обеспечение базы данных в образе, но используя внешний том. хранить данные.
Это - версия, которую я использую, она возвращает a PropertyInfo
, но завоевывание репутацию тривиально.
public static PropertyInfo GetProperty<T>(Expression<Func<T, object>> expression)
{
MemberExpression memberExpression = null;
if (expression.Body.NodeType == ExpressionType.Convert)
{
memberExpression = ((UnaryExpression) expression.Body).Operand as MemberExpression;
}
else if (expression.Body.NodeType == ExpressionType.MemberAccess)
{
memberExpression = expression.Body as MemberExpression;
}
if (memberExpression == null)
{
throw new ArgumentException("Not a member access", "expression");
}
return memberExpression.Member as PropertyInfo;
}
Что-то вроде этого должно добиться цели:
public static string GetPropertyName<T>(this IList<T> list, Expression<Func<T, object>> expr) {
MemberExpression member_expression = expr.Body as MemberExpression;
if (member_expression == null)
throw new ArgumentNullException("member_expression");
MemberInfo member = member_expression.Member;
PropertyInfo property = member as PropertyInfo;
string proname = memeber.name;
}
ПРЕДУПРЕЖДЕНИЕ: воздушный кодекс!
вот очень простой и быстрый способ сделать это в этом блоге: http://blog.bittercoder.com/PermaLink,guid, 206e64d1-29ae-4362-874b-83f5b103727f.aspx
Итак, дано:
Func func = Name => "Значение";
Вы можете получить параметр лямбда «Имя» от делегата функции от призвание:
func.Method.GetParameters () [0] .Name (вернет "Name")
Вот исправленный метод Hash из Андрей:
public Dictionary<string, T> Hash<T>(params Func<string, T>[] args)
where T : class
{
var items = new Dictionary<string, T>();
foreach (var func in args)
{
var item = func(null);
items.Add(func.Method.GetParameters()[0].Name, item);
}
return items;
}
Надеюсь, поможет, Патрик
Небольшое примечание: func.Method.GetParameters () [0] .Name is чрезвычайно быстро по сравнению с компиляцией лямбда-выражения и извлечением выражения члена, затем информации о члене, затем имени.