-1

我在 Xamarin Android 应用程序中使用 SQLite.Net。我有一个看起来像这样的实体:

[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;
}

我将以下对象传递给此方法:

var auditEntry = new AuditEntity
{
                EntryId = Guid.NewGuid(),
                Action = uri.ToString(),
                GeoLocation = geoLocation,
                Time = DateTime.Now
};

偶尔会抛出 SQLite 异常,并显示“约束”消息,我理解这是违反主键的。

(自动创建的)表中的 EntryId 列的类型为 varchar(36)。

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

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

4

1 回答 1

0

在上面的代码中'EntryId'被设置为一个自动递增的列,所以你不需要再次插入'EntryId'值,你可以将'EntryId'的数据类型设置为整数。

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

于 2017-01-24T13:41:35.180 回答