0
我想強制我的域中的所有DateTime在sql server上都是datetime2。我知道我可以使用:EF5代碼第一個datetime2,構建linq表達式
Property(x => x.Field).HasColumnType("datetime2");
在我的EntityTypeConfiguration派生類。
但我想代碼少「冗長」。我嘗試以下方法:
public static void SetDateTimeColumnType<T>(EntityTypeConfiguration<T> etc) where T : class {
Type t = typeof(T);
foreach (PropertyInfo pi in t.GetProperties(BindingFlags.Public | BindingFlags.Instance)) {
if (pi.PropertyType.Name == "DateTime") {
etc.Property(x => (DateTime)pi.GetValue(x)).HasColumnType("datetime2");
}
}
}
,但我得到以下異常:
The expression 'x => Convert(value(EFVIPRepository.ContextUtilities+<>c__DisplayClass0`1[ValkirIP.Domain.Entities.IPRight]).pi.GetValue(x))'
is not a valid property expression.
The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'.
Use dotted paths for nested properties: C#: 't => t.MyProperty.MyProperty' VB.Net: 'Function(t) t.MyProperty.MyProperty'.
我想我真正的問題是如何建立從屬性的名稱是「物業expresssion」,如果可能的話。
預先感謝您
=====編輯=====
我也嘗試
Expression expr = Expression.Property(System.Linq.Expressions.Expression.Variable(t), pi);
etc.Property((Expression<Func<T, DateTime>>)expr).HasColumnType("datetime2");
但下列情況除外:
Impossible d'effectuer un cast d'un objet de type 'System.Linq.Expressions.PropertyExpression' en type 'System.Linq.Expressions.Expression`1[System.Func`2[ValkirIP.Domain.Entities.IPRight,System.DateTime]]'.