有很多方法可以做到这一点。
选项 1 - 修复集合集。
public class Header
{
private List<Lines> _lines
public int HeaderId { get; set; }
public List<Line> Lines
{
get { return _lines; }
set
{
_lines = value;
if(_lines != null)
{
foreach(var line in _lines)
line.HeaderId = HeaderId;
}
}
}
}
public class Line
{
public int LineId { get; set; }
public int HeaderId { get; set; }
}
这条路线的问题是 HeaderId 仅在您设置Lines
集合时设置。这意味着您可以在事后更改它,否则您添加的任何新项目Lines
都不会被更正。
选项 2 - 在构造线时传入标题
public class Header
{
public int HeaderId { get; set; }
public List<Line> Lines { get; set; }
}
public class Line
{
public Header ParentHeader { get; }
public int LineId { get; set; }
public int? HeaderId { get { return ParentHeader?.HeaderId; }
public Line(Header header)
{
ParentHeader = header;
}
}
只要您Header
对所有行都有相同的实例,如果您更改Header.HeaderId
所有行将自动更新。
选项 3 - 不要将 Line 的实例直接添加到集合中
public class Header
{
List<Line> _lines = new List<Line>();
public int HeaderId { get; set; }
public ReadOnlyCollection<Line> Lines { get {return _lines.AsReadOnly(); }
public void AddLine(Line line)
{
line.HeaderId = HeaderId;
_lines.Add(line);
}
}
这将与选项 1 具有相同的问题。