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

Visual Studio中SQLite配置:让Person表关联Car对象的方法

解决SQLite-net中Person模型关联Car对象的保存错误

问题原因

SQLite-net基础版不支持直接存储嵌套的复杂对象(比如你的Cars实例),它仅能处理基本数据类型和外键关联。错误提示Don't know about People.Person.Cars,要么是模型中存在未正确配置的导航属性,要么是视图绑定了不存在的Cars属性。

解决方案:用外键关联替代直接存储对象

1. 修正Car模型(确保有主键)

先确认你的Car模型配置了主键,示例如下:

using SQLite;

namespace People.Models
{
    [Table("cars")]
    public class Car
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        // 自定义Car的其他属性
        public string LicensePlate { get; set; }
        public string Model { get; set; }
    }
}

2. 修改Person模型,配置外键和导航属性

把直接存储的Cars对象替换为外键ID,并用[Ignore]标记导航属性(避免SQLite-net尝试将其存入数据库):

using SQLite;

namespace People.Models
{
    [Table("people")]
    public class Person
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        [MaxLength(50), Unique]
        public string Name { get; set; }

        // 外键:关联Car表的Id字段
        [ForeignKey(typeof(Car))]
        public int CarId { get; set; }

        // 导航属性:仅用于代码中关联Car对象,不存入数据库
        [Ignore]
        public Car EmployeeCar { get; set; }
    }
}

3. 调整保存逻辑,先存Car再存Person

必须先保存Car实例以获取其主键ID,再将该ID赋值给Person的外键字段,最后保存Person:

// 假设已有SQLiteConnection实例db
var newCar = new Car 
{ 
    LicensePlate = "XYZ789", 
    Model = "Ford Mustang" 
};
// 先保存Car,生成主键Id
db.Insert(newCar);

var newPerson = new Person 
{ 
    Name = "David Hernandez", 
    CarId = newCar.Id 
};
// 保存Person
db.Insert(newPerson);

4. 检查视图绑定匹配

错误提示中的Cars大概率是视图绑定了错误的属性名,确保视图中绑定的是EmployeeCar(模型中的导航属性名),而非不存在的Cars。

5. 查询时关联Car对象

如果需要获取带关联Car的Person,需手动查询关联:

var person = db.Get<Person>(personId);
// 通过外键ID查询对应的Car
person.EmployeeCar = db.Get<Car>(person.CarId);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:53:26