Sqlite-net的文档说你可以使用库中的ORM创建一个表,使用泛型如下:
await connection.creatTableAsync<myClass>();
这将导致名为myClass
现在假设我需要另一个表来存储相同类型(myClass),但是在另一个具有不同名称的表中(例如myOtherClassTable
)。
如何使用Sqlite-net库完成此操作?
答案 0 :(得分:2)
现在假设我需要另一个表来存储相同的类型 (myClass)但在另一个名称不同的表中
你不能这样做。
Table方法要求存在一个与其名称相同的表 返回的类型。
这是一个简单的ORM,并不是为了关注您对其施加的任何人为限制。它根据类型名称跟踪使用的表,因此在处理查找表之前需要另一层间接,以查看某个类型被映射到多个表。
如果我想检索数据库中myClass对象的所有行 - 如果它从myClass表和myOtherClassTable返回行,该怎么办?你需要开始编写更多的ORM功能来提供选项并找出所有这些,这正是那些让你进入严重ORM领域的东西。
根据所有属性的可见性,您可以创建一个子类类型,它实际上不实现任何新功能,但只是具有不同的类名或使用公共IMyClass接口,实际上有两个不同的类实现不同的接口名称,但相同的实施。
这些OO解决方案都不是非常理想的,如果可能的话,您应该考虑在您要过滤的类对象中添加另一个属性,以确定您将放入2个单独表中的项目。
答案 1 :(得分:2)
API只为您提供了两个选项:int CreateTable<T>(CreateFlags createFlags = CreateFlags.None)
和int CreateTable(Type ty, CreateFlags createFlags = CreateFlags.None)
,这两个选项都会创建一个以您输入的类型命名的表格。
你可以做什么而不是自己创建表:
connection.Execute("CREATE TABLE [myOtherTable] (Column1 int, Column2 ...");
但是,正如@nvuono已经说过,这可能会给你一些其他麻烦;)