我对此有点新鲜。我想使用https://github.com/praeclarum/sqlite-net/blob/master/examples/Stocks/Stocks.cs
来使用SQLite-net dealio这是我获得此代码的确切示例。我喜欢能够宣传我的模型非常快速和干净的想法。
然而,我得到了这个。我想知道它是否会创建一个新的数据库以及每次运行的所有内容,如果你从appdelegate类调用它,就像它建议的那样。 new _db = new Database();
这就是它在app委托类中使用的内容,我对它有点吓坏了。我需要数据保持不变。 有人可以告诉我这是否会每次都重新创建,如果是这样,如何创建数据库,我的模型类中的表会将它们保存在只生成一次的普通db文件中。
感谢任何帮助!
public class Database : SQLiteConnection
{
public Database (string path) : base(path)
{
CreateTable<Stock> ();
CreateTable<Valuation> ();
}
// more code here
}
答案 0 :(得分:3)
CreateTable()方法确实创建了表(如果它尚不存在),但它不会破坏表中已有的任何数据。
答案 1 :(得分:1)
不是使用SQLiteConnection
以这种方式创建数据库,而是更容易使用sqliteconnection
并检查数据库是否存在。然后,如果db文件不存在,请使用一个方法来构建表。下面有一个代码示例。
这使您能够使用MVC模型方法创建所有类,并利用https://github.com/praeclarum/sqlite-net库,同时仍然以编程方式构建db而不使用实际的sql语句
public class Database
{
static string documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
// I do this so I can access the path without having to create an instance of the datbase class
public static string db = Path.Combine (documents, "dbAwesome.db");
static bool exists = File.Exists(db);
public void GetConnection()
{
if (!exists) {
SqliteConnection.CreateFile (db);
// Custom methods to create initial tables and values for tables
CreateMyTables ();
InsertDefaultValues ();
}
}
}
答案 2 :(得分:0)
SQLite.Net是一个ORM。如果你使用它(Sqlite.cs),它不会重新创建表。
“在数据库上执行”如果不存在则创建表“表示方法摘要。 正如你看到代码;如果执行失败,则count将为0,代码将通过现有ORM映射传递索引。
如果存在行为不同,它只是看起来是ORM映射,如下所示。
它还为ORM创建索引,因为您知道我们应该使用[PrimaryKey]。通过这种方式调用CRUD操作。
/// <summary>
/// Executes a "create table if not exists" on the database. It also
/// creates any specified indexes on the columns of the table. It uses
/// a schema automatically generated from the specified type. You can
/// later access this schema by calling GetMapping.
/// </summary>
/// <returns>
/// The number of entries added to the database schema.
/// </returns>
public int CreateTable<T> ()
{
var ty = typeof(T);
if (_tables == null) {
_tables = new Dictionary<string, TableMapping> ();
}
TableMapping map;
if (!_tables.TryGetValue (ty.FullName, out map)) {
map = GetMapping (ty);
_tables.Add (ty.FullName, map);
}
var query = "create table \"" + map.TableName + "\"(\n";
var decls = map.Columns.Select (p => Orm.SqlDecl (p));
var decl = string.Join (",\n", decls.ToArray ());
query += decl;
query += ")";
var count = 0;
try {
Execute (query);
count = 1;
}
catch (SQLiteException) {
}
if (count == 0) {
// Table already exists, migrate it
MigrateTable (map);
}
foreach (var p in map.Columns.Where (x => x.IsIndexed)) {
var indexName = map.TableName + "_" + p.Name;
var q = string.Format ("create index if not exists \"{0}\" on \"{1}\"(\"{2}\")", indexName, map.TableName, p.Name);
count += Execute (q);
}
return count;
}