Closed CHenBuCHen closed 2 years ago
另外问一下 为什么不支持 long 做主键自增。 sqlite 里 当主键自增大于int32 时会用 int64 保存,那么程序就会报错 OverflowException: Value was either too large or too small for an Int32. 还有就是如果用int32 做主键,因为数据太多主键数字溢出了怎么办。
能不能就是说将数据重新排列,重新填充因为被删除而空缺出来的主键,如下 在使用过程中 主键:1,2,3,4,5.......100,101,.... 因为业务原因部分数据删除了剩下了:1,5,10,11......100,101,130.....此时主键溢出了,重新排列数据,使用被删除部分的主键是否可行。 因为我的业务数据不是很大,肯定不会超过int32,就怕因为时间的积累而溢出了。为此分库分表 是不是太复杂了。所以是这么个思路
- UniqueIndexAttribute 目前只是在分片情况下用来做查询优化而已,其他地方还没用上。
- 支持long做自增的,你那边用long自增出现了什么问题?
- 重新排列数据,使用被删除部分的主键- - 这个业界也没解决方案吧
先谢谢作者,非常感谢!
那怎么给表建索引
开发环境 Unity3D 2021 、 数据库 Sqlite,引用DLL Chloe.dll、Chloe.Extension.dll、Chloe.SQLite.dll、Mono.Data.Sqlite.dll 如下报错
SqliteException: SQLite error AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY Mono.Data.Sqlite.SQLite3.Prepare (Mono.Data.Sqlite.SqliteConnection cnn, System.String strSql, Mono.Data.Sqlite.SqliteStatement previous, System.UInt32 timeoutMS, System.String& strRemain) (at
:0)
数据类型同时也不支持 ushort、 ulong。我用的 Mono.Data.Sqlite, 不是System.Data.Sqlite 会用影响吗。
NotSupportedException: System.UInt64 Chloe.SQLite.DDL.SQLiteTableGenerator.GetDataTypeName (Chloe.Descriptors.PrimitivePropertyDescriptor propertyDescriptor) (at <5395145902a54cc3aae90b899e279191>:0)
NotSupportedException: System.UInt64 Chloe.SQLite.DDL.SQLiteTableGenerator.GetDataTypeName (Chloe.Descriptors.PrimitivePropertyDescriptor propertyDescriptor) (at <5395145902a54cc3aae90b899e279191>:0)
代码如下
[Table]
public class Actor
{
[Column(IsPrimaryKey = true)]
public long ID { get; set; }
public ulong AssetID { get; set; }
public ushort LocationID { get; set; }
public string Name { get; set; }
public float PosX { get; set; }
public float PosY { get; set; }
public float PosZ { get; set; }
}
public class SQLiteConnectionFactory : IDbConnectionFactory
{
private string _connString = null;
public SQLiteConnectionFactory(string connString)
{
this._connString = connString;
}
public IDbConnection CreateConnection()
{
IDbConnection conn = null;
conn = new SqliteConnection("Data Source=" + _connString);
return conn;
}
}
using (var conn = new SQLiteContext(new SQLiteConnectionFactory(path)))
{
var tableGenerator = new SQLiteTableGenerator(conn);
tableGenerator.CreateTables(new[] { typeof(Actor) });
}
SQLiteTableGenerator 不是一个完善的功能,不要在项目里用(确切的说是我用来做简单的建表做测试的,很多建表细节都没处理,后悔放在框架里了,造成了大家误用- -)。 如果需要建表,手写DDL语句吧,自己把控建表语句。- -
当然,如果你需要用SQLiteTableGenerator的话,可以先自己在这加如上那段代码,就能解决你遇上的 long 自增问题
明白了, 非常感谢!
找到一个 UniqueIndexAttribute 注释是唯一索引, 没有非唯一的索引吗。 而且用了下这个 UniqueIndexAttribute 也不起作用呀。 实际查看下来并没有创建索引。