Одинаковые ли ссылки на объектные рамки для объектов базы данных - PullRequest
8 голосов
/ 01 июля 2011

Возвращает ли структура сущностей одну и ту же ссылку на объект, если я запрашиваю «логически» (в базе данных) один и тот же объект из разных мест.

Например, я запросил клиента с именем Джо Блэк (и предположим, что покаЯ знаю, что в базе данных есть только один Джо Блэк.) Customer c = select ... blabla where ... Name == Joe Black...; и где-то еще в коде я запросил Customer c2 = select... where.. ID==5, где 5 - это идентификатор Джо Блэка.Я знаю, что в базе данных они отображаются на один и тот же объект, но они также отображаются на один и тот же объект на уровне кода?Так с1 равен с2?У меня есть списки для слияния и проверки на логическое равенство объектов (сейчас я не могу получить доступ к базе данных), и мне было интересно, будут ли объекты Entity Framework хорошо с ним работать или я должен написать свои собственные классы сравнения.

1 Ответ

13 голосов
/ 01 июля 2011

Большинство ORM, включая Entity Framework и NHibernate, используют Pattern Identity Map Pattern , чтобы гарантировать, что для каждого первичного ключа существует только один экземпляр данного объекта.Карта идентичности ограничена контекстом, поэтому два разных контекста создадут два объекта, которые ссылаются на одну и ту же сущность.Рекомендуется, чтобы сущности реализовывали IEquatable, включая переопределения для операторов равенства, чтобы сработали '==' или '! ='.Это больше, чем то, что можно подумать.Взгляните здесь для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...