首页 > 解决方案 > 使用实体框架将列表对象分成两个对象

问题描述

我有一个问题......
我需要将一个列表分成两个对象,我有下一个代码:

public class User
{
    [Key]
    public Guid Id { get; set; }

    public virtual List<PersonalData> _PersonalData
    {
        get
        {
            List<PersonalData> listDP = new List<PersonalData>();
            if (PersonalData != null)
            {
                listDP.Add(PersonalData);
            }
            if (InitialsPersonalData != null)
            {
                listDP.Add(InitialsPersonalData);
            }
            return listDP;
        }
        set
        {
            InitialsPersonalData = value.FirstOrDefault(dp => dp.IsInitialData);
            PersonalData = value.FirstOrDefault(dp => !dp.IsInitialData);
        }
    }

    [NotMapped]
    public PersonalData InitialsPersonalData { get; set; }
    [NotMapped]
    public PersonalData PersonalData { get; set; }
}

public class PersonalData
{
    [Key, ForeignKey("User"), Column(Order = 0)]
    public Guid User_Id { get; set; }
    [Key, Column(Order = 1)]
    public bool IsInitialData { get; set; }
    public virtual User User { get; set; }
    [Required]
    public string Email { get; set; }
    [Required]
    public string Name { get; set; }
    public string Surname { get; set; }
}

public class Document
{
    [Key, ForeignKey("User"), Column(Order = 0)]
    public Guid User_Id { get; set; }
    [Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public DocumentType DocumentType { get; set; }
    public virtual User User { get; set; }
    public string DocumentNumber { get; set; }
}

有可能这样做吗?我正在使用延迟加载。get 方法有效,但 set 方法无效,永远不要进入 set 方法。
我尝试将_PersonalData用作私有和公共,有虚拟和没有虚拟......问题是当我这样做时:

dbContext.Users.Where(......)

PersonalData 和 InitialPersonalData 始终为 null,Documents 可以并自动执行 Include。
你能帮我吗?怎么了?有可能这样做吗?谢谢大家。

标签: c#asp.net-mvcentity-framework-6ef-code-firstlazy-loading

解决方案


PersonalData并且InitialPersonalData未映射到数据库中,因此您不能在数据库端使用它们。

您需要dbContext.Users.ToList()在使用它们之前将您的数据具体化,但这将打开您的整个用户表,并且根据大小,如果您有任何其他标准在实现之前过滤您的表,这将减慢您的应用程序应用它来改进性能。


推荐阅读