Где найти реализацию C# шаблона "Поле идентичности" (Фаулера), который поддерживает несколько полей разных типов

Я нашел одно, которое позволяет несколько полей типа long. Тем не менее, я не уверен, насколько это полезно, потому что иногда у нас могут быть гиды или даже даты, например.

Я мог бы также изменить его, чтобы он соответствовал моим потребностям, но, похоже, это будет настолько распространенная просьба, чтобы я мог найти что-то проверенное, испытанное и верное, а не создавать его с нуля.

Основная цель, которую я преследую, это использование шаблона Identity Map. Я считаю, что этот шаблон более или менее требует шаблона Identity Field для его поддержки. Я буду использовать конструкцию Identity Field в качестве ключа к своему словарю

Есть идеи?

Спасибо

2 ответа

Я думаю, что для реализации аналогичного шаблона для PK с несколькими столбцами, вам просто нужно создать поле / свойство в вашем классе для каждого из столбцов PK в таблице.

Например, если у вас есть таблица "Message" с PK с long, guid и datetime, вашему классу нужно будет просто включить свойство long, Guid и DateTime.

Возможно, вы также захотите реализовать Equals() и GetHashCode() для объекта, использующего эти поля PK, потому что вы хотите, чтобы эти объекты сравнивались в терминах базы данных, а не в терминах адреса объекта в памяти. GetHashCode важен, потому что вы хотите, чтобы объекты с одинаковыми свойствами PK производили одинаковый хеш-код. Чтобы реализовать GetHashCode, я бы порекомендовал посмотреть на ответ Джона Скита: каков наилучший алгоритм для переопределенного System.Object.GetHashCode?

Шаблон Фаулера "Поле идентичности" может предполагать, что в ваших таблицах есть один столбец суррогатного ПК, и поэтому он указывает его так, как он это делает.

Проверьте архитектуру S#arp. Когда вы наследуете от их Entity объект, вы можете украсить столько свойств, сколько вы хотите с DomainSignatureAttribute, Эти свойства будут затем рассматриваться как идентичность объекта при реализации Equals а также GetHashCode это предусмотрено в Entity,

Другие вопросы по тегам