c# - 使用实体框架将列表对象分成两个对象
问题描述
我有一个问题......
我需要将一个列表分成两个对象,我有下一个代码:
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。
你能帮我吗?怎么了?有可能这样做吗?谢谢大家。
解决方案
PersonalData
并且InitialPersonalData
未映射到数据库中,因此您不能在数据库端使用它们。
您需要dbContext.Users.ToList()
在使用它们之前将您的数据具体化,但这将打开您的整个用户表,并且根据大小,如果您有任何其他标准在实现之前过滤您的表,这将减慢您的应用程序应用它来改进性能。
推荐阅读
- c++ - 将变量/数据类型编译成可执行文件(Ghidra、C、C++、gcc)
- sql - 新线路没有被淘汰
- reactjs - 在 Framer Motion 中不起作用的子项的退出动画
- sql - 按列分组小于或等于该列中的值
- ios - 有关持久存储协调器如何工作的更多详细信息?
- excel - 制作一个可搜索的组合框来替换没有辅助列的数据验证
- php - 如何解决 PHP 中的这个 OpenSSL“EVP_DecryptFinal_ex:bad decrypt”错误?
- javascript - Next.js SSG 是否支持动态数据?
- php - 在渲染视图之前使用 Laravel 抓取 TrusPilot
- postgresql - 生成 Postgres 转储并保存到另一台服务器