微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

主/详细关系的对象初始化

如何解决主/详细关系的对象初始化

我有两个类代表一个主详细信息关系,其中主对象包含明细,而明细对象引用主。我正在尝试使用对象初始化来实例化它们,但是不确定如何将主引用传递到细节中……也许不可能,但想问一下。

我有以下课程:

public class Detail
{
    public Detail(string type,string value,Entity entity) {...}
    public string Value { get; set; }

    public Master Master { get; set; }
}

public class Master
{
    public string ID { get; set; }

    public IEnumerable<Detail> Details{ get; set; }
}

如果我想使用对象初始化器,如何将主引用传递给详细实例?

List<Master> = new List<Master>()
{
    new Master()
    {
        Details= new List<Detail>()
        {
             new Detail()
             {
                 Master = ???
             } 
        }
    }
};

解决方法

不管您的代码中有很多错误,您都不能使用对象初始化来引用父图的各个部分。您要么需要使用构造器,辅助器,设置器,要么要在事后设置它:

public class Master()
{
     public Master(List<Detail> details)
     {
         details.ForEach(x => x.Master = this);
         Details = details;
     }
     ...
}

用法:

List<Master> = new List<Master>()
{
    new Master(new List<details>{...})
}

或事实之后的示例,因为DetailsIEnumerable<T>

list.ForEach(x => x.Details.ToList().ForEach(y => y.Master = x));
,

您可以通过将Master.Details作为设置Detail.Master的完整属性来实现

public class Master
{
    public string ID { get; set; }

    public IEnumerable<Detail> Details
    {
        get => details;
        set
        {
            foreach(var detail in value)
            {
                detail.Master = this;
            }
            this.details = value;
        }
    }

    private IEnumerable<Detail> details { get; set; }
}

用法:

var master = new Master
{
    Details = new List <Detail>
    {
        new Detail {}
    }
};


Console.WriteLine(
    master.Details.All(detail => detail.Master == master)
);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。