2011-12-02 7 views
0

안녕하세요! 이 문제에 직면 db4o는을보십시오 : 나는 기록을 삭제할 수 없습니다 :이 코드 후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 < 날짜 시간을> 이동).

답변

2

이것은 작동하지 않습니다! KeyValuePair는 값 유형이므로 ID가 없음을 의미합니다. 그러나 db4o는 ID로 개체를 관리합니다! 이제 C#은 객체에 모든 값 유형을 기쁜 마음으로 넣습니다.하지만 db4o에서는 데이터베이스에서 주어진 ID를 가진 객체를 찾지 못하기 때문에 유용하지 않습니다.

.NET과 db4o 동작 사이에 성가신 구석이 있습니다. 기본적으로 db4o에는 내부 ID = (.

) 개체를 삭제할 API가 없으므로 근본적인 해결 방법이 없습니다. 앞으로는 KeyValuePairs (또는 구조체)를 저장하지 마십시오. (그리고 8.1을 사용하면 구조체를 절대로 삭제할 수없는 버그 수정이 있습니다.)이 문제를 피할 수 있습니다.

관련 문제