Судя по исходному коду, который я смотрю, он не генерирует должным образом GUID для всего, что не является SQL Server или PostgreSQL, независимо от того, что на самом деле написано в документации README . Соответствующие ссылки кода ниже:
Лучшая альтернатива, которую я могу предоставить здесь, - переопределить OracleOrmLiteDialectProvider . В частности, я бы переопределил метод GetAutoIdDefaultValue
, чтобы он возвращал "SYS_GUID()"
, если тип поля - 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 позволяет вам контролировать все в той степени, в которой вы нуждаетесь. Надеюсь это поможет. Кроме того, быстрое предостережение - я не полностью испек это решение, так что вам может нужно его настроить, но на основании других реализаций провайдеров оно кажется простым.