NHibernate: как вставить С# [Guid] в столбец MySQL [BINARY(16) DEFAULT (uuid_to_bin(uuid(),1))]?
Среда: MySQL Server 8.0, .NET Core 3.1, MySql.Data 8.0.28, NHibernate 5.3.11
У меня есть следующая таблица:
CREATE TABLE `Master` (
`Row_Id` char(36) NOT NULL DEFAULT (uuid()),
`Path` varchar(1000) NOT NULL,
PRIMARY KEY (`Row_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Ниже приводится определение сущности и сопоставление:
public class MasterEntity
{
public virtual Guid RowId { get; set; }
public virtual string Path { get; set; }
}
internal sealed class MasterMap : ClassMapping<MasterEntity>
{
public MasterMap()
{
Table("Master");
Id
(
x => x.RowId,
map =>
{
map.Column("Row_Id");
map.Generator(Generators.GuidComb);
}
);
Property(x => x.Path, map => { map.Column("Path"); map.NotNullable(true); map.Type(TypeFactory.GetAnsiStringType(1000)); });
}
}
Ниже показано, как я
INSERT
этот объект с использованием NHibernate:
using(ISession session = SessionFactory.OpenSession())
{
MasterEntity entity = new MasterEntity();
entity.Path = "c:\whatever";
session.Save(entity);
session.Flush();
}
Это вставляет запись правильно. До сих пор все в порядке.
Теперь я изменяю определение
Row_Id
столбец, как показано ниже:
`Row_Id` binary(16) NOT NULL DEFAULT (uuid_to_bin(uuid(),1)),
Я ничего не меняю в своем коде C#. Сейчас
session.Flush();
вызов выдает исключение ниже:
NHibernate.Exceptions.GenericADOException: could not execute batch command.[SQL: SQL not available]
---> MySql.Data.MySqlClient.MySqlException (0x80004005): Data too long for column 'Row_Id' at row 1
Ошибка выглядит очевидной. В С# 32, а длина столбца 16.
Какие изменения мне нужно внести в мое сопоставление или определение объекта (или другую часть кода), чтобы вставить С#
Guid
в
BINARY(16) DEFAULT (uuid_to_bin(uuid(),1))
столбец?