为什么LINQ to SQL数据库没有在WP7模拟器中保留?

时间:2011-08-13 01:13:11

标签: linq-to-sql windows-phone-7

我正在尝试使用LINQ to SQL在WP7 7.1 beta 2中保留一个非常简单的用户名/密码组合。到目前为止,一切都按预期工作(使用下面的存储库/模型类)

我可以创建一个新数据库,为该行插入记录和查询(并且它返回持久用户没问题)。但是当我执行此表达式“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 个答案:

答案 0 :(得分:3)

使用Isolated Storage Explorer,您可以创建和还原模拟器隔离存储的快照。您可能希望在关闭模拟器之前使用它来保存数据库的状态,然后在重新启动模拟器后恢复它。

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

答案 1 :(得分:2)

这是预期的行为。

数据库(和其他数据)存储在仿真器上的Isolated Storage中。 模拟器在关机时清除隔离存储(see the first Note in MSDN here),因此您的数据库将被删除。