【问题标题】:Divide List object in two objects with Entity Framework使用实体框架将列表对象分成两个对象
【发布时间】:2018-08-23 06:55:35
【问题描述】:

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

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-mvc entity-framework-6 ef-code-first lazy-loading


    【解决方案1】:

    PersonalDataInitialPersonalData 没有映射到 DB 中,因此您不能在 DB 端使用它们。

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

    【讨论】:

    • 如果我这样做了,EF 在用户表中创建了InitialsPersonalData_IdPersonalData_Id,我遇到了级联删除问题...最后我创建了另一个类...现在我有 2 个类@ 987654326@ 和 PersonalData 我知道可能不酷...但我找不到其他解决方案... :S ty
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多