2011-08-13 4 views
4

LINQ to SQLを使用してWP7 7.1ベータ2で非常に単純なユーザー名とパスワードのコンボを維持しようとしています。LINQ to SQLデータベースがWP7エミュレータで永続化されないのはなぜですか?

私は新しいデータベースを作成し、レコードを挿入してその行を照会できます(永続化されたユーザーには問題はありません)。しかし、次回に私がエミュレータをスピンアップするときに、この表現 "db.DatabaseExists()"を実行すると

これは通常の動作ですか、セッション間でこれを保持するように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

これは予期した動作です。

データベース(およびその他のデータ)は、エミュレータの分離ストレージに格納されます。エミュレータは、シャットダウン時にIsolated Storage(see the first Note in MSDN here)をクリアしてデータベースを削除します。

3

Isolated Storage Explorerを使用すると、エミュレータの隔離されたストレージのスナップショットを作成および復元できます。エミュレータを終了する前にデータベースの状態を保存し、エミュレータを再起動した後で復元することができます。

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

関連する問題