我正在使用反射和类型构建器构建动态类,所有,我想知道如何直接类型转换为c#类型
目前我正在做这种方式,但EF提供这种东西吗?
case "uniqueidentifier": return typeof(Guid); case "bit": return typeof(Boolean); case "nvarchar": return (typeof(string)); case "datetime": return typeof(DateTime); case "float": return typeof(double); case "int": return (typeof(int));
谢谢
UPDATE
我认为到目前为止EF没有提供实用程序可以公开访问.接受的答案与Ef无关.那里有不同的图书馆.
RyszardDżegan已给出答案,但不能在TT模板或edmx之外使用(或者我可能不知道)
解决方法
我不知道这样的公共方法(我认为没有…它可能被接受为答案)
但是,尝试重新编译sqlMetal.exe,您可以很好地了解内部如何实现默认关联:
在类LinqTosqlShared.Utility.DbTypeSystem(内部类)中,您可以找到以下方法:
internal static Type GetClosestRuntimeType(sqlDbType sqlDbType) { switch (sqlDbType) { case sqlDbType.BigInt: return typeof(long); case sqlDbType.Binary: case sqlDbType.Image: case sqlDbType.Timestamp: case sqlDbType.VarBinary: return typeof(Binary); case sqlDbType.Bit: return typeof(bool); case sqlDbType.Char: case sqlDbType.NChar: case sqlDbType.NText: case sqlDbType.NVarChar: case sqlDbType.Text: case sqlDbType.VarChar: return typeof(string); case sqlDbType.DateTime: case sqlDbType.SmallDateTime: case sqlDbType.Date: case sqlDbType.DateTime2: return typeof(DateTime); case sqlDbType.Decimal: case sqlDbType.Money: case sqlDbType.SmallMoney: return typeof(decimal); case sqlDbType.Float: return typeof(double); case sqlDbType.Int: return typeof(int); case sqlDbType.Real: return typeof(float); case sqlDbType.UniqueIdentifier: return typeof(Guid); case sqlDbType.SmallInt: return typeof(short); case sqlDbType.TinyInt: return typeof(byte); case sqlDbType.Xml: return typeof(XElement); case sqlDbType.Time: return typeof(TimeSpan); case sqlDbType.DateTimeOffset: return typeof(DateTimeOffset); } return typeof(object); }
编辑:
>见this作为参考>在同一个类中还有一个静态sqlDbType Parse(string stype)方法,它从sql类型字符串定义返回一个枚举sqlDbType.