ローカル データベースを使用してデータを保存しています。アプリケーションをオフラインモードでも動作させたいので、*.sdf
ロード元のファイルがあります。ユーザーが望まない場合は、データを更新する必要はありません。Isolated Storage
これは私のDataContext
見た目です:
public class TablesDataContext : DataContext
{
// Specify the connection string as a static, used in main page and app.xaml.
public static string DBConnectionString = "Data Source=isostore:/MyDatabase.sdf";
// Pass the connection string to the base class.
public TablesDataContext(string connectionString)
: base(connectionString)
{ }
// Specify a single table for the items.
public Table<CustomerItem> CustomersTable;
public Table<ProductItem> ProductsTable;
}
ここで、App.xaml.cs
必要に応じてデータベースを作成します。
// Create the database if it does not exist.
using (TablesDataContext db = new TablesDataContext(TablesDataContext.DBConnectionString))
{
if (db.DatabaseExists() == false)
{
//Create the database
db.CreateDatabase();
}
}
dataContext = new UserDataContext();
そして、SettingsPage
必要な情報を更新する私のもの:
public partial class SettingsPage : PhoneApplicationPage
{
// Data context for the local database
private TablesDataContext tablesDB;
// Define an observable collection property that controls can bind to.
private ObservableCollection<CustomerItem> _customersTable;
public ObservableCollection<CustomerItem> CustomersTable
{
get
{
return _customersTable;
}
set
{
if (_customersTable != value)
{
_customersTable = value;
NotifyPropertyChanged("CustomersTable");
}
}
}
// Define an observable collection property that controls can bind to.
private ObservableCollection<ProductItem> _productTable;
public ObservableCollection<ProductItem> ProductTable
{
get
{
return _productTable;
}
set
{
if (_productTable != value)
{
_productTable = value;
NotifyPropertyChanged("ProductTable");
}
}
}
public void addingCustomersToDatabase(List<CustomerJSON> customersList)
{
// Define the query to gather all of the to-do items.
var customersTablesInDB = from CustomerItem todo in tablesDB.CustomersTable
select todo;
// Execute the query and place the results into a collection.
CustomersTable = new ObservableCollection<CustomerItem>(customersTablesInDB);
tablesDB.CustomersTable.DeleteAllOnSubmit(CustomersTable);
tablesDB.SubmitChanges();
foreach (CustomerJSON customer in customersList)
{
// Create a new to-do item based on the text box.
CustomerItem newCustomer = new CustomerItem
{
// Filling customer data from JSON object
};
// Add a to-do item to the observable collection.
CustomersTable.Add(newCustomer);
// Add a to-do item to the local database.
tablesDB.CustomersTable.InsertOnSubmit(newCustomer);
tablesDB.SubmitChanges();
}
}
public void addingProductsToDatabase(List<ProductJSON> ProductsList)
{
// Same things as in previouse method but with products objects
}
private void Load_Click(object sender, RoutedEventArgs e)
{
addingCustomersToDatabase(customersList);
addingProductsToDatabase(productsList);
}
}
情報を更新した後、データが最新であると確信していますが、それはアプリケーションを閉じるまでのことです。アプリケーションを再度開くと、まだ古いデータが残っています。*.sdf
私が正しく理解していれば、それはすでに私のファイルに保存されるべきではありませんか? ところで、私はLinqを使用しています。
編集:
なんとかチェックしたところ、そのJSON解析の直後にデータベースが更新されていることがわかりました(* .sdfファイルは新しいデータで満たされています)が、アプリケーションを閉じて再度開くと(ビルドではなく、エミュレーターで再度開くだけです)、再び古いデータがあります。