You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ORMlite中类直接引用对象失败及插入后ID未更新问题求助

问题1:EmployeeAssignedProject始终为空

原因

  1. OrmLite默认不会自动加载关联对象,Select<T>仅查询当前表数据,不会主动关联查询关联表。
  2. 你的Employee类映射存在错误:关联对象属性EmployeeAssignedProject并非数据库字段,不能直接用[Alias]和[ForeignKey]标记。数据库中存储的是int类型的外键值employee_assignedProject,需先定义对应外键字段,再通过[Reference]关联Projects对象。

解决步骤

修正Employee类的映射

[Table("Employee")]
public class Employee
{
    [PrimaryKey]
    [AutoIncrement]
    [Alias("employee_id")]
    public int EmployeeId { get; set; }

    [Alias("employee_name")]
    public string EmployeeName { get; set; }

    // 对应数据库外键字段 employee_assignedProject
    [Alias("employee_assignedProject")]
    [ForeignKey(typeof(Projects))]
    public int EmployeeAssignedProjectId { get; set; }

    // 关联Projects对象,用[Reference]标记
    [Reference]
    public Projects EmployeeAssignedProject { get; set; }
}

使用LoadSelect加载关联数据

将原来的Select<Employee>()替换为LoadSelect<Employee>(),它会自动执行关联查询并填充EmployeeAssignedProject属性:

List<Employee> employees1 = dbconn.LoadSelect<Employee>();

问题2:插入Projects后ProjectId始终为0

原因

OrmLite默认的Insert方法不会自动回填自增主键值,需显式指定selectIdentity: true参数,让OrmLite在插入后查询生成的主键并赋值给对象。

解决步骤

插入Projects时使用带selectIdentity参数的重载:

var project = new Projects { ProjectDescription = "Test Project" };
dbconn.Insert(project, selectIdentity: true);
// 此时project.ProjectId会被设置为数据库生成的自增ID

内容的提问来源于stack exchange,提问作者GoldNova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:10:13