C# 关联父数据模型对象和子数据模型对象的最佳方式是什么?

C# 关联父数据模型对象和子数据模型对象的最佳方式是什么?,c#,entity-framework,datamodel,C#,Entity Framework,Datamodel,我下面的代码在建立父子关系时看起来非常复杂 问题:关联父数据模型对象和子数据模型对象的最佳方式是什么 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; using ConsoleApplication1; class Child { public string Name { get; set; }

我下面的代码在建立父子关系时看起来非常复杂

问题:关联父数据模型对象和子数据模型对象的最佳方式是什么

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using ConsoleApplication1;

class Child
{
    public string Name { get; set; }
    public Parent Parent { get; set; }
}


class Parent
{
    public string Name { get; set; }
    public IEnumerable<Child> Children { get; set; }
}


class Program
{
    static void Main(string[] args)
    {
        Parent p1 = new Parent { Name = "P1" };

        Child c1 = new Child { Name = "C1" };
        c1.Parent = p1;

        Child c2 = new Child { Name = "C2" };
        c2.Parent = p1;


        List<Child> children = new List<Child>();
        children.Add(c1);
        children.Add(c2);

        p1.Children = children;
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Linq.Expressions;
使用ConsoleApplication1;
班童
{
公共字符串名称{get;set;}
公共父级{get;set;}
}
班级家长
{
公共字符串名称{get;set;}
公共IEnumerable子项{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
父项p1=新父项{Name=“p1”};
子项c1=新子项{Name=“c1”};
c1.父代=p1;
子c2=新子{Name=“c2”};
c2.父母=p1;
列表子项=新列表();
添加(c1);
增加(c2);
p1.儿童=儿童;
}
}

这个问题可能会有帮助:


也许您应该在类中实现一些helper方法,这些方法封装了一些基本思想:

public class Parent {

....
    public void AddChild(Child child) {
        child.Parent = this;
        this.Children.Add(child);
    }

    public void RemoveChild(Child child) {
        child.Parent = null;
        this.Children.Remove(child);
    }
}


public class Child {
    private Child() {}

    public static Child CreateChild(Parent parent) {
        var child = new Child();
        parent.AddChild(child);
        return child;
    }
}

我将从子构造函数中删除chid.Parent=Parent,Parent.AddChild已经这样做了。你只是在重复你自己。可能会将孩子的构造函数设为私有,添加一个creater方法,该方法将父对象作为输入和其他属性,创建孩子并使用父对象的AddChild方法(简而言之,将其设为单例)
class Parent
{
  ...
  public Child AddChild(string name)
  {
    return this.AddChild(new Child(name));
  }

  public Child AddChild(Child c)
  {
    c.Parent = this;
    this.children.Add(c);

    return c;
  }
}