如何在NPoco中更新嵌套对象

时间:2016-05-02 02:20:09

标签: c# petapoco micro-orm npoco

我找不到在多对一情况下更新嵌套对象的示例。很清楚映射如何在Fetch上运行;我不是说更新嵌套对象的集合,只是一个。所以给出以下示例:

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    [ResultColumn]
    public School CurrentSchool { get; set; }
}

public class School
{
    public int SchoolId { get; set; }
    public string Name { get; set; }
}

在数据库中,Student表包含一个CurrentSchool列,该列是School表中记录的ID。

我没有更新School对象本身,而是将学生映射到另一个。这在Query上很好,但如果我更改Student上的CurrentSchool对象并使用db.Update(studentObject)保存,则外键不会更新。

1 个答案:

答案 0 :(得分:1)

在单步执行源代码后,我发现NPoco.ColumnInfo类中有一个ReferenceType属性。正在搜索这个内容,看看 Version 3 下的NPoco wiki中的文档 - > 关系https://github.com/schotime/NPoco/wiki/Version-3#relationships)。

如果我加入:

    CAShapeLayer *circleLayer = [CAShapeLayer layer];
    [circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(74.93, 59.5, 31.52, 31.2)] CGPath]];
    [circleLayer setStrokeColor:[[UIColor colorWithRed:0.8 green:0.1 blue:0.2 alpha:1.0] CGColor]];
    [circleLayer setFillColor:[[UIColor colorWithRed:0.8 green:0.1 blue:0.2 alpha:1.0] CGColor]];        

    CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    CABasicAnimation* shrinkAnim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
    fadeAnim.toValue = [NSNumber numberWithFloat:0.0];
    fadeAnim.duration = 1.25;
    shrinkAnim.fromValue = [NSNumber numberWithFloat:1.0];
    shrinkAnim.toValue = [NSNumber numberWithFloat:0.05];
    shrinkAnim.duration = 1.25;
    [circle1 addAnimation:fadeAnim forKey:@"opacity"];
    [circle1 addAnimation:shrinkAnim forKey:@"transform.scale"];
    circle1.opacity = 0.0;

然后在DB对象中保留Student对象时保存外键关系。