2011-08-13 2 views
4

LINQ to SQL을 사용하여 WP7 7.1 베타 2에서 매우 간단한 사용자 이름/암호 조합을 유지하려고합니다. 지금까지 모든 것이 예상대로 작동합니다 (아래의 저장소/모델 클래스 사용)LINQ to SQL 데이터베이스가 WP7 에뮬레이터에서 유지되지 않는 이유는 무엇입니까?

새 데이터베이스를 만들고 레코드를 삽입하고 해당 행을 쿼리하면 지속 된 사용자에게 아무런 문제가 없습니다. 그러나 다음 번에 에뮬레이터를 회전 할 때 "db.DatabaseExists()"표현식을 실행할 때 db 컨텍스트가 false를 반환합니다.

이 일반적인 동작은 에뮬레이터에서 발생합니까 아니면 세션간에이를 유지하도록 LINQ에 말하지 않습니까?

사전

저장소 클래스

public class UserRepository : IDisposable 
{ 
    private readonly UserDataContext context; 
    public UserDataContext Context 
    { 
     get { return context; } 
    } 

    public UserRepository() 
    { 
     context = new UserDataContext(UserDataContext.DBConnectionString); 
     CreateDatabase(); 
    } 

    private void CreateDatabase() 
    { 
     if (context.DatabaseExists() == false) 
     { 
      context.CreateDatabase(); 
     } 
    } 

    public User GetByID(int id) 
    { 
     return context.GetTable<User>().FirstOrDefault(e => e.UserId.Equals(id)); 
    } 

    public User GetByUsername(string username) 
    { 
     return context.GetTable<User>().FirstOrDefault(e => e.UserName.Equals(username)); 
    } 

    public void Save(User user) 
    { 
     if (user.UserId > 0) 
     { 
      context.GetTable<User>().Attach(user, true); 
     } 
     else 
     { 
      context.GetTable<User>().InsertOnSubmit(user); 
     } 

     context.SubmitChanges(); 
    } 

    public List<User> GetAll() 
    { 
     return context.GetTable<User>().ToList(); 
    } 

    public int Count() 
    { 
     return context.GetTable<User>().Count(); 
    } 

    public void Dispose() 
    { 
     if (context != null) 
     { 
      context.Dispose(); 
     } 
    } 
} 

모델

[Table] 
public class User 
{ 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] 
    public int UserId { get; set; } 

    [Column] 
    public string UserName { get; set; } 

    [Column] 
    public string Password { get; set; } 
} 

상황

에 감사드립니다
public class UserDataContext : DataContext 
{ 
    public static string DBConnectionString = "Data Source=isostore:/User.sdf"; 

    public UserDataContext(string connectionString) : base(connectionString) { } 

    public Table<User> Users; 
} 

답변

2

이것은 예상되는 동작입니다.

데이터베이스 (및 기타 데이터)는 에뮬레이터의 격리 저장소에 저장됩니다. 에뮬레이터는 종료시 격리 저장소를 지우고 (see the first Note in MSDN here) 데이터베이스가 삭제됩니다.

3

격리 된 저장소 탐색기를 사용하면 에뮬레이터 격리 저장소의 스냅 샷을 만들고 복원 할 수 있습니다. 에뮬레이터를 종료하기 전에 데이터베이스의 상태를 저장 한 다음 에뮬레이터를 다시 시작한 후에 복원하는 것이 좋습니다.

http://msdn.microsoft.com/en-us/library/hh286408(v=vs.92).aspx