ORMlite中类直接引用对象失败及插入后ID未更新问题求助
问题1:EmployeeAssignedProject始终为空
原因
- OrmLite默认不会自动加载关联对象,
Select<T>仅查询当前表数据,不会主动关联查询关联表。 - 你的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
相关产品推荐
相关产品推荐

