db4o не удаляет запись - PullRequest
       8

db4o не удаляет запись

0 голосов
/ 02 декабря 2011

Добрый день! Попробуйте db4o, столкнулся с этой проблемой: не могу удалить записи:

using (IObjectServer server = Db4oClientServer.OpenServer(HttpContext.Current.Server.MapPath("~/transfers.data"), 0))
            {
                using (IObjectContainer client = server.OpenClient())
                {
                    var keyValuePair = (from KeyValuePair<DateTime, Transfer> d in client where d.Key < DateTime.Now.AddHours(-3) select d);
                    client.Delete(keyValuePair.First());
                    client.Commit();       
                }
            }

После этого кода количество объектов (KeyValuePair ) в базе данных не изменяется.

1 Ответ

2 голосов
/ 02 декабря 2011

Это не будет работать!Причина в том, что KeyValuePair является типом значения, что означает, что у него нет идентификатора.Однако db4o управляет объектами по их идентичности!Теперь C # радостно связывает любой тип значения с объектом, но это бесполезно для db4o, так как он не найдет в базе данных ни один объект с данным идентификатором.

Вы столкнулись с досадным угловым случаем между .NET иповедение db4o.В принципе, это не обходится, особенно потому, что db4o не имеет API для удаления объекта по его внутреннему id = (.

на будущее. Не храните KeyValuePairs (или любую структуру)для себя. Только как часть другого объекта. (и использовать 8.1, он имеет исправление, запрещающее никогда не удалять структуры). Это позволяет избежать этой проблемы.

...