【问题标题】:Dealing with SQLite Autoincrement column mapping in LINQtoSQL处理 LINQtoSQL 中的 SQLite Autoincrement 列映射
【发布时间】:2011-08-22 15:16:12
【问题描述】:

我有以下实体

    [Table(Name = "Users")]
    public sealed class UserDB
    {
        private Int64 _id = -1;
        private string _username = string.Empty;

        public UserDB() { }

        public UserDB(RepositoryInfo repoInfo)
        {
            UserName = repoInfo.Account;
        }

        [Column(Name = "ID", Storage = "_id",  IsDbGenerated = true, IsPrimaryKey = true, UpdateCheck = UpdateCheck.Never)]
        public Int64 ID { get { return _id; } set { _id = value; } }

        [Column(Name = "UserName", DbType="nvarchar(50)", Storage = "_username")]
        public string UserName { get { return _username; } set { _username = value; } }
    }

ID 映射到 Autoincrement INTEGER 类型 列(实际上是 SQLite 中唯一可能具有自动增量的类型)

当我尝试像这样向数据库添加新用户时,出现错误:

public static Int64 AddUser(DataContext context, RepositoryInfo repoInfo)
{            
    UserDB udb = new UserDB(repoInfo);

    //an ID of udb is -1, but I tried different values too, doesn't change result
    var userstable = context.GetTable<UserDB>();
    userstable.InsertOnSubmit( udb );


    context.SubmitChanges(); // here I get a error, see on screen shot

    return udb.ID;

}

编辑 经过谷歌搜索和检查,似乎 SQLite 根本不提供任何 SCOPE_IDENTITY() 函数。但是 Linq To SQL 注入了它!

我该如何更改?

【问题讨论】:

    标签: c# sqlite orm


    【解决方案1】:

    实际上我没有找到解决此问题的解决方案,如果不是那个架构之一 => 更改 linq 查询以更改输出的 SQL。

    【讨论】:

      【解决方案2】:

      这似乎有点老套,但根据this answer,您只需将“null”传递给您的 id 列,以便 sqlite 执行自动增量。这对我有用:

      [Table(Name = "yourtable")]
      class yourclass
      {
          [Column(Name = "id", IsPrimaryKey=true )]
          public int? Id { get; set; }
      
      ...
      

      然后,当您为 InsertOnSubmit 创建一个新对象时,您可以省略 id 列,它将默认为 null。

      要获取使用自动增量创建的新 ID,请参阅 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-09
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2010-09-19
        • 2017-04-14
        相关资源
        最近更新 更多