SQLite.Net SQLiteException约束插入

时间:2017-01-24 12:53:28

标签: c# android xamarin sqlite.net

我在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)。

为什么插入有时会抛出异常?

如果我使用非泛型方法,通过参数化命令进行插入,我没有看到异常,但我宁愿使用泛型方法。

1 个答案:

答案 0 :(得分:0)

在上面的代码中,'EntryId'被设置为自动递增列,因此您不需要再次插入'EntryId'值,并且您可以设置'EntryId'的数据类型是整数。

如果你想要guid类型的id,你可以在你的实体中设置EntryId = Guid.NewGuid()。Tostring()然后在你的表中插入的每个新值都会自动创建entryId。(我没有太多的声誉来评论你的问题,所以我以答案的形式ping。)