【发布时间】:2018-11-24 15:28:17
【问题描述】:
我有两个代码优先实体,Package 和 PackageEntry,我在 EF Core 中设置时遇到问题。
我正在尝试使用代码优先实体和 Fluent API 实现以下目标:
- 一个包可以包含任意数量的 PackageEntries
- 每个 PackageEntry 都有一个对单个 Package 实体的引用(包的不同实例,与包含 PackageEntries 集合的父 Package 引用无关)
两个实体:
public class Package{
public Package()
{
_packageEntries = new List<PackageEntry>();
}
//trimmed other properties
private readonly List<PackageEntry> _packageEntries;
[NotMapped]
public IReadOnlyCollection<PackageEntry> PackageEntries => _packageEntries.ToList().AsReadOnly();
}
和
public class PackageEntry
{
public int DisplayOrder { get; set; }
public int PackageID { get; set; }
public Package Package { get; set; }
public int Quantity { get; set; }
public Package ParentPackage { get; set; }
public int ParentPackageID { get; set; }
}
我目前使用的 Fluent API 不起作用的是:
modelBuilder.Entity<Package>().HasMany(x => x.PackageEntries).WithOne();
modelBuilder.Entity<PackageEntry>().HasOne(x => x.Package).WithOne().HasForeignKey(typeof(PackageEntry), "PackageID");
它不会引发错误,但我看到的是,当将 PackageEntry 添加到包中时,在上下文中调用 SaveChanges 时不会保存它。
我在 Fluent API 或其他方面做错了吗?
编辑 我错过了将顶级包添加到上下文中,一旦完成,添加到其中的包条目将被保存。我仍然会感谢有关 Fluent API 设置和任何最佳实践的 cmets。
从 PackageEntry 实体中,我需要知道父包和包含的包,它们将是对同一类型的单独引用。我似乎无法使用 Fluent API 进行设置,当父包通过 EF 加载时,它不包含任何 PackageEntry 对象,即使它们的 ParentPackageID 设置正确。
【问题讨论】:
标签: ef-code-first entity-framework-core ef-fluent-api