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
相关产品推荐
相关产品推荐

