根据我正在查看的源代码,无论README 上的文档实际说明了什么,它似乎都无法为任何不是 SQL Server 或 PostgreSQL 的东西正确生成 GUID。相关代码链接如下:
我可以在这里提供的最佳选择是覆盖OracleOrmLiteDialectProvider。具体来说,如果字段类型是 GUID,我将覆盖 GetAutoIdDefaultValue 方法以返回 "SYS_GUID()"。下面的示例代码...
public OracleNewGuidOrmLiteDialectProvider : OracleOrmLiteDialectProvider
{
public static OracleNewGuidOrmLiteDialectProvider Instance = new OracleNewGuidOrmLiteDialectProvider();
public string AutoIdGuidFunction { get; set; } = "SYS_GUID()";
public override string GetAutoIdDefaultValue(FieldDefinition fieldDef)
{
return fieldDef.FieldType == typeof(Guid)
? AutoIdGuidFunction
: null;
}
}
为了匹配其余的提供者实现,我建议创建一个OracleNewGuidDialect 类,如下所示...
public static class OracleNewGuidDialect
{
public static IOrmLiteDialectProvider Provider => OracleNewGuidOrmLiteDialectProvider.Instance;
}
然后,当您将OrmLiteConnectionFactory 实例化为OracleNewGuidOrmLiteDialectProvider.Instance 时,您将设置提供程序,类似于下面...
var dbFactory = new OrmLiteConnectionFactory(oracleConnectionString, OracleNewGuidDialect.Provider);
这不是最好的解决方案,但 ServiceStack ORMLite 的可插拔特性允许您在需要的范围内控制一切。希望这可以帮助。另外,请注意——我没有完全烘焙此解决方案,因此您可能需要对其进行调整,但基于提供程序的其他实现,这似乎很简单。