Вам нужно позвонить
samplesDbEntities.SaveChanges();
перед запросом объекта.
var samplesDbEntities = new SamplesDBEntities();
var blogId = Guid.NewGuid();
samplesDbEntities.Blogs.AddObject(new Blog() { BlogID = blogId });
samplesDbEntities.SaveChanges();
var objectSetResult = samplesDbEntities.Blogs
.Where(p => p.BlogID == blogId)
.SingleOrDefault();
Обновление
Причина, по которой вы не возвращаете добавленного пользователя в objectSetResult, заключается в том, что вызов метода SingleOrDefault объекта IQueryable приводит к запросу к базе данных (генерируется фактическая строка запроса SQL в соответствии с условием «где» и т. Д.) и, поскольку объект (еще) отсутствует в базе данных, он не возвращается.
Новый объект, однако, присоединен к контексту, и его EntityState имеет значение «Добавлено». Согласно MSDN, объекты в состоянии «Добавлен» не имеют исходных значений в ObjectStateEntry. Состояние объектов внутри контекста объекта управляется ObjectStateManager. Поэтому, если вы хотите проверить, действительно ли объект был прикреплен, вы можете получить его, вызвав GetObjectStateEntry:
var samplesDbEntities = new SamplesDBEntities();
Blog blog = new Blog() { BlogID = Guid.NewGuid() };
samplesDbEntities.Blogs.AddObject("Blogs", blog);
Blog addedBlog = (Blog)context.ObjectStateManager.GetObjectStateEntry(blog).Entity;
Также обратите внимание, что EntityState для извлеченного объекта «Добавлено».
Подводя итог - относительно вашего первоначального вопроса о том, является ли это правильной реализацией UnitOfWork, я не вижу, почему нет. Он действительно поддерживает список объектов и отслеживает изменения и т. Д. И т. Д. Однако проблема, с которой вы столкнулись, связана с тем, что вы выбираете данные из базового провайдера, а не из списка объектов, в настоящее время прикрепленных к контекст.