在SQLite数据库中保存接口项列表

时间:2016-07-08 12:43:07

标签: c# sqlite uwp

我正在开发一款应用程序。要保存我想要使用SQLite数据库的项目。该实现通常工作(使用SQLite.Net-PCL库),但是我没有保存从名为IItem的接口继承的项集合。

它的工作方式如下:

var conn = new SQLiteConnection(new SQLitePlatformWinRT(), "myapp.db");

// Code that creates the `items` list.

foreach (IItem item in items)
    conn.InsertOrReplace(item, typeof(IItem));

但是为了减少开销,我更喜欢这样做:

conn.InsertOrReplaceAll(items, typeof(List<IItem>));

可悲的是,由于System.Reflection.TargetException,这不起作用。

任何让后者工作的想法,主要是因为性能原因?

1 个答案:

答案 0 :(得分:0)

这里的问题是您使用了错误的类型作为InsertOrReplaceAll方法中的参数。此方法中的objType表示单个项目的类型,您可以使用以下方法:

conn.InsertOrReplaceAll(items, typeof(IItem));

为了清楚地看到这一点,我们可以查看source code on GitHub

public int InsertOrReplaceAll(IEnumerable objects, Type objType)
{
    var c = 0;
    RunInTransaction(() =>
    {
        foreach (var r in objects)
        {
            c += InsertOrReplace(r, objType);
        }
    });
    return c;
}

从源代码中我们可以发现,在此方法中,它还调用InsertOrReplace(object obj, Type objType)方法。此外,还有另一种InsertOrReplaceAll的重载方法。

public int InsertOrReplaceAll(IEnumerable objects);

使用这种方法,我们可以不关心类型问题。