我在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();
}
}