2010-01-24 6 views
0

db4o를 백엔드로 사용하는 전자 상거래 웹 사이트를 개발 중입니다. 지난 주까지 내가 풀 수 없었던 문제를 만났을 때 모든 것이 잘되었습니다. 아래의 코드는 매우 간단합니다. 데이터베이스 파일을 열고 개체를 저장 한 다음 검색하려고합니다. 그러나 나는 아무것도 얻지 않는다. "users"변수의 개수는 0입니다.db4o 데이터베이스에서 객체로드

public class Program 
{ 
    private static string _connectionString = string.Format(@"c:\aaarrrr.db4o"); 

    static void Main(string[] args) 
    { 
     TestUser container = new TestUser() { id = 1, Name = "Mohammad", Surname = "Rafiq" }; 

     Db4oFactory.Configure().Diagnostic().AddListener(new DiagnosticToConsole()); 

     using (var dbc = Db4oFactory.OpenFile(_connectionString)) 
     { 
      dbc.Store(container); 
     } 

     IList<TestUser> users = null; 

     using (var dbc = Db4oFactory.OpenFile(_connectionString)) 
     { 
      users = dbc.Query<TestUser>(x => x.id == 1).ToList(); 
     } 

     if (users.Count > 0) 
     { 
      Console.WriteLine("{0} {1} with id of {2}", users.First().Name, users.First().Surname, users.First().id); 
     } 
     else 
     { 
      Console.WriteLine("\nNo data returned."); 
     } 

     Console.ReadLine(); 
    } 
} 

public class TestUser 
{ 
    [Indexed] 
    private int _id = 0; 
    private string _name = string.Empty; 
    private string _surname = string.Empty; 

    public int id { get { return _id; } set { _id = value; } } 
    public string Name { get { return _name; } set { _name = value; } } 
    public string Surname { get { return _surname; } set { _surname = value; } } 
} 

db4o 진단 수신기가 연결되어 있으며 콘솔 출력에 아무것도 표시되지 않습니다. 모든게 잘된 것 같습니다. 나는 파일 크기 증가를 볼 수 있고 타임 스탬프도 업데이트되어 파일에 쓰고 있음을 알고 있습니다. 모든 프로젝트 설정을 확인했고 모두 기본값으로 설정되었습니다. .net 4, visual studio 2010 베타 및 Windows 7을 사용하고 있습니다. 리플렉션 사용 권한과 관련하여 약간의 내용을 읽었으나이 내용이 어떻게 적용되는지는 알 수 없습니다. 어떤 도움이나 아이디어라도 감사 할 것입니다.

+0

업데이트. 새로운 콘솔 응용 프로그램 프로젝트를 만들고이 코드를 복사하여 해당 프로젝트에 붙여 넣었습니다. 응용 프로그램을 실행하고 놀랍게도 잘 작동했습니다. 프로젝트 설정과 관련이 있거나 DLL의 프로젝트 참조 일 수 있습니다. – user257768

+0

VS 2008 및 .NET 3.5에서 코드를 실행했습니다. 여기에서 잘 작동합니다. 두 프로젝트 모두에 'Db4objects.Db4o.NativeQueries.dll'- 어셈블리를 추가 했습니까? 'Db4objects.Db4o.NativeQueries.dll'- 어셈블리가 있으면 위의 쿼리가 최적화되고 그렇지 않으면 최적화되지 않습니다. 따라서 상당한 차이가 있습니다. – Gamlor

+0

문제를 재현 할 수있었습니다. 네임 스페이스와 관련이 있습니다. 프로젝트 속성에서 "어셈블리 이름"과 "기본 네임 스페이스"를 "테스트"와 같은 간단한 이름으로 설정하면 코드가 제대로 작동합니다. 그러나 "Dukaan.Provider.db4o"로 설정하면 코드가 작동하지 않습니다. 당신이 이것을 확인할 수 있다면 좋을 것입니다. 고맙습니다. P.S 예 이러한 어셈블리를 추가했습니다. – user257768

답변

0

store()를 호출 한 후 using {} 문을 종료하기 전에 commit()해야합니다. 변경 사항을 커밋하기 전에 데이터베이스를 닫았습니다.