Sqlite-net从同一个类创建两个表

时间:2014-12-31 16:28:18

标签: c# sqlite sqlite-net

Sqlite-net的文档说你可以使用库中的ORM创建一个表,使用泛型如下:

await connection.creatTableAsync<myClass>();

这将导致名为myClass

的数据库中的表

现在假设我需要另一个表来存储相同类型(myClass),但是在另一个具有不同名称的表中(例如myOtherClassTable)。

如何使用Sqlite-net库完成此操作?

2 个答案:

答案 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已经说过,这可能会给你一些其他麻烦;)