我正在尝试使用 LINQ to SQL 在 WP7 7.1 beta 2 中保留一个非常简单的用户名/密码组合。到目前为止,一切都按预期工作(使用下面的存储库/模型类)
我可以创建一个新数据库,插入一条记录并查询该行(并且它返回持久用户没问题)。但是下次我启动模拟器时,当我执行这个表达式“db.DatabaseExists()”时,db上下文返回false
这是模拟器的正常行为还是我没有告诉 LINQ 在 session 之间保持这种行为?
先感谢您
存储库类
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;
}
最佳答案
独立存储资源管理器允许您创建和恢复模拟器的独立存储的快照。您可能希望在关闭模拟器之前使用它来保存数据库的状态,然后在重新启动模拟器后恢复它。
http://msdn.microsoft.com/en-us/library/hh286408(v=vs.92).aspx
关于linq-to-sql - 为什么 LINQ to SQL 数据库没有保留在 WP7 模拟器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047894/