我在Xamarin Android应用程序中使用SQLite.Net。我有一个看起来像这样的实体:
dynamo_db = Aws::DynamoDB::Client.new(
region: "your-region",
access_key_id: "anykey-or-xxx",
secret_access_key: "anykey-or-xxx",
endpoint: "http://localhost:8080"
)
我有一个通用的插入方法,如下所示:
[DataEntity]
public class AuditEntity
{
[PrimaryKey]
public Guid EntryId { get; set; }
public string Action { get; set; }
public string GeoLocation { get; set; }
public DateTime Time { get; set; }
}
我将以下对象传递给此方法:
public int Insert<T>(T obj) where T : class
{
var result = 0;
try
{
result = Connection.Insert(obj);
}
catch (SQLiteException ex)
{
Mvx.Trace(MvxTraceLevel.Error, $"Exception while inserting into database:\r\n{ex.ToLongString()}");
}
return result;
}
有时会抛出SQLite异常并显示“Constraint”消息,据我所知这是违反主键的。
(自动创建的)表中的EntryId列的类型为varchar(36)。
为什么插入有时会抛出异常?
如果我使用非泛型方法,通过参数化命令进行插入,我没有看到异常,但我宁愿使用泛型方法。
答案 0 :(得分:0)
在上面的代码中,'EntryId'被设置为自动递增列,因此您不需要再次插入'EntryId'值,并且您可以设置'EntryId'的数据类型是整数。
如果你想要guid类型的id,你可以在你的实体中设置EntryId = Guid.NewGuid()。Tostring()然后在你的表中插入的每个新值都会自动创建entryId。(我没有太多的声誉来评论你的问题,所以我以答案的形式ping。)