使用实体框架将列表对象分为两个对象

时间:2018-08-23 06:55:36

标签: c# asp.net-mvc entity-framework-6 ef-code-first lazy-loading

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

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正常运行,并且可以自包含。
能帮我吗?怎么了?有可能吗?谢谢大家

1 个答案:

答案 0 :(得分:0)

PersonalDataInitialPersonalData没有映射到数据库中,因此不能在数据库端使用它们。

在使用数据之前,您需要先用dbContext.Users.ToList()来实现您的数据,但是这将显示整个Users表,并且如果您要过滤其他条件,则取决于大小,这会使您的应用程序变慢在实现之前将您的表应用于改善性能。