我在xamarin.forms应用程序中使用sqlite net扩展库。我在PCL中编写数据库代码和模型。

当我调用SQLiteConnection.CreateTable()时出现错误
System.NotSupportedException: Don't know about Cigars.Models.Cigar

Smoke是雪茄的孩子,它与ManyToOne有关系。
这些是模型:

抽烟

public class Smoke
{

    [PrimaryKey]
    public int SmokeId { get; set; }

    [ForeignKey(typeof(Cigar))]
    public int CigarId { get; set; }

    public string Notes { get; set; }

    public DateTime DateCreated { get; set; }

    //why is this not recognized?
    [ManyToOne]
    public Cigar Cigar { get; set; }

}


雪茄

public class Cigar
{

    [PrimaryKey]
    public int CigarId { get; set; }

    public string Name { get; set; }

    public double Length { get; set; }
}


我的数据库调用导致引发异常:

private SQLiteConnection db;

public Database(string path)
{
    db = new SQLiteConnection(path);
    db.CreateTable<Cigar>();
    db.CreateTable<Smoke>(); //this throws the error
}

最佳答案

问题是我为sqlite安装了两个不同的库,都包含一个SQLiteConnection

我需要将Sqlite.Net.SQLiteConnection类用于sqlite网络扩展。不是我使用的Sqlite.SQLiteConnection

正如SushiHangover指出的那样,此Sqlite.Net.SQLiteConnection采用类型为ISQLitePlatform的第一个参数。

为了获得对此的参考,我定义了一个接口,该接口提供了返回ISQLitePlatform的方法的签名:

public interface ISQLitePlatformInstance
{
    ISQLitePlatform GetSQLitePlatformInstance();
}


我在Droid项目(我要建立的平台)中实现了该接口:

public class SQLitePlatformInstance : ISQLitePlatformInstance
{

    public ISQLitePlatform GetSQLitePlatformInstance()
    {
        return new SQLitePlatformAndroid();
    }

}

07-28 01:57