Skip to content

GUID issues #69

@martinRocks

Description

@martinRocks

Hi,
I love your library. Would it be possible to add a mapping for GUIDs? We store GUIDs in an oracle RAW 16. Why oracle doesn't have a specific field type for GUIDs, I don't understand. However, I need to convert the byte array to GUID. And in my case, I have to do Endian flip. I don't know if others have to do this Endian flip.

Below is an example of what I am doing. The AWN_SA_ID is the column name that is mapped by dapper. AwnSaId is the guid that I actually use.

public class Dto
        {
            public byte[] AWN_SA_ID
            {
                set => AwnSaId = FlipEndian(new Guid(value));
            }
            public Guid AwnSaId { get; set; }
            public string Jcn { get; set; }
            public string Hsc { get; set; }
        }

        private static Guid FlipEndian(Guid guid)
        {
            var newBytes = new byte[16];
            var oldBytes = guid.ToByteArray();
            for (var i = 8; i < 16; i++)
            {
                newBytes[i] = oldBytes[i];
            }

            newBytes[3] = oldBytes[0];
            newBytes[2] = oldBytes[1];
            newBytes[1] = oldBytes[2];
            newBytes[0] = oldBytes[3];
            newBytes[5] = oldBytes[4];
            newBytes[4] = oldBytes[5];
            newBytes[6] = oldBytes[7];
            newBytes[7] = oldBytes[6];
            return new Guid(newBytes);
        }

public void DapperStoredProcedure()
        {
            List<Dto> data;
            var connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            using (var connection = new OracleConnection(connStr))
            {
                var values = new OracleDynamicParameters();
                values.Add("i_uic", Uic, OracleMappingType.Varchar2, ParameterDirection.Input);
                values.Add("o_cur", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);

                data = connection.Query<Dto>("jcn_exports.get_work_notifications", values, commandType: CommandType.StoredProcedure).ToList();
            }
            Console.WriteLine($"The count is {data.Count}");
            WriteGuid(data);
        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions