- 在Oracle中,没有Guid类型,因此它们被存储为
nvarchar2(38)
。 - 在SQL Server中,有一个GUID类型,所以没有问题。
是否有一种方法可以全局覆盖Oracle Entity Framework提供程序的行为,使得任何在数据库中映射到POCO类中的Guid类型列都可以具有自定义转换行为?
现在有些人可能会说,“不要将Guid存储为字符串在Oracle中!改用RAW(16),因为EF可以很好地处理它”。不幸的是,在这里这不是一个选项。
我能否“教”Entity Framework如何将字符串数据库值转换为Guids?
更新
我刚刚发现this链接,它表明该功能不是EF6的本机功能,但可能会在未来的版本中发布。
此外,我更喜欢不通过将私有属性映射为自定义转换器来进行操作,如这里所示。
更新
以下是“从'System.String'到'System.Guid'的无效转换”异常的堆栈跟踪:
在System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
在System.String.System.IConvertible.ToType(Type type, IFormatProvider provider)
在System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
在Oracle.DataAccess.Client.OracleDataReader.ChangeType(Object sourceValue, Type targetType)
在Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)
在System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader1.GetUntypedValueDefault(DbDataReader reader, Int32 ordinal)
在System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader1.GetValue(DbDataReader reader, Int32 ordinal)
在System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 ordinal)
在lambda_method(Closure , Shaper )
在System.Data.Entity.Core.Common.Internal.Materialization.Coordinator1.ReadNextElement(Shaper shaper)