c# - 如何插入具有另一个类(外键)属性的 PetaPoco 对象?
问题描述
为了简化和缩短我的问题,假设我有以下课程:
[TableName("persons")]
[PrimaryKey("person_id")]
public class Person {
[Column("person_id")]
public int Id { get; set; }
public string Name { get; set; }
[Column("car_id")]
public Car Car { get; set; }
}
[TableName("cars")]
[PrimaryKey("car_id")]
public class Car {
[Column("car_id")]
public int Id { get; set; }
public string Color { get; set; }
[Column("year")]
public int YearOfMake { get; set; }
}
同样,为了简单起见,让我们假设每个Person
人都有一个Car
,这就是数据库当前的状态(我知道我可以简单地使用一个表,但这只是一种简化)。
我可以使用以下方法获取Person
对象及其Car
属性:
using(var db = GetDatabase())
{
string sql = "select * from persons p left join cars c on c.car_id = p.car_id";
Person p = db.Fetch<Person, Car>(sql).FirstOrDefault();
Console.WriteLine(String.Format("Person: {0} has a {1} car", p.Name, p.Car.Color));
}
我面临的第一个问题是,如果数据库结果表中的两列具有相同的名称,那么 PetaPoco 将它们在我的对象中的两个值都设置为零。我设法重命名列以避免该问题。
真正的问题是当我尝试保存/插入一个Person
对象时。如果对象只有原始值类型,它就可以工作,但是Car
对象使事情变得困难。
这是我尝试过的:
Person p2 = new Person { Name = "mike", Car = new Car {Id = 42, Color = "red", YearOfMake = 2003 }};
db.Insert<Person>(p2); // error: can't convert `Car` to `Int32`
db.Insert<Person, Car>(p2); // error: can't convert `Car` to `Int32`
如何插入具有类类型作为其属性之一的对象?
解决方案
推荐阅读
- git - 无法从 azure devops 中提取代码(要求输入密码)
- angular - 我想从一个组件打开对话框并在 3 秒后将其关闭,但出现错误。我遵循 Angular Material UI 文档,但没有任何效果
- python - 如何有效地遍历大量字典引用?
- firebase - Raspberry pi 与云 Firestore 的集成
- arrays - 排序/访问嵌套在字典中的数组
- java - 显示最小/最大数组
- ios - SwiftUI ChildView 未在状态更改时重新计算
- python - 对坐标和非空间特征的地理空间数据进行聚类
- python - 在 Windows 上高效地进行 Python 多处理
- python - 为什么我使用 matplotlib 的曲线拟合图看起来很模糊?