我目前正在开发一个Windows窗体应用程序,我想使用一个不需要支持服务器或凭据来运行的简单数据库,所以我选择了SQLite。但到目前为止,试图让这件事情发挥作用是一场噩梦。
现在,我有一些简单属性的简单类,我想将它存储在数据库中。我已经为所有内容添加了相应的标签([Table("")]
用于类,[PrimaryKey, AutoIncrement]
用于Id属性),但每当我执行Connection.CreateTable(CreateFlags.AutoIncPK)
时(它不会显示泛型参数,但它是在那里,我保证),它抛出一个NotSupportedException,说“不知道MyProject.MyClass”。我还在每个类中提供了一个空的无参数构造函数。
那么,我如何让SQLite“了解”我的班级?
编辑: 我的Character.cs文件:
[Table("Character")]
class Character
{
[PrimaryKey, AutoIncrement]
public int id { get; set; }
public string Name
{
get;
set;
}
public string FilePath
{
get;
set;
}
public Character()
{
}
public Character(string file)
{
this.FilePath = file;
this.Name = FetchName(file);
}
private string FetchName(string file)
{
string[] fileHolder = File.ReadAllLines("\\chars\\" + file);
foreach (string line in fileHolder)
{
if (line.ToLower().StartsWith("name"))
{
if (!line.Contains(';'))
return line.Split('=')[1].Trim().Trim('"');
else return line.Split('=')[1].Split(';')[0].Trim().Trim('"');
}
}
return string.Empty;
}
}
我的Database.cs文件:
class Database
{
private static SQLiteConnection Connection;
private static string ConnectionString = "MyProject.sqlite";
public Database()
{
if (!File.Exists("MyProject.sqlite"))
System.Data.SQLite.SQLiteConnection.CreateFile("MyProject.sqlite");
using (Connection = new SQLiteConnection(ConnectionString))
{
Connection.CreateTable<Character>(CreateFlags.AutoIncPK);
}
}
}
答案 0 :(得分:0)
描述您的表的类必须是公开的。 在您的示例中,字符类不公开。
您应该像这样更改声明:
[Table("Character")]
public class Character
{
// your class code...
}
答案 1 :(得分:0)
我知道回答原始问题有点晚了,但是自从我的Google-Fu带领我来到这里以来,我希望这将对遇到相同错误消息的其他人有所帮助:
在我作为公共静态属性添加到具有[table]属性的类后,我开始收到此错误消息。将[忽略]属性添加到属性后,我不再收到错误消息。