【发布时间】:2021-11-03 15:50:08
【问题描述】:
我正在开发一个仓库系统,其中我有 Pack 和 Load 实体。 现实生活中的结构是这样的:
仓库:
- 包1
- 加载1
- 包2
- 包3
- 加载2
- 包4
- 包5
- 加载3
- 包6
- 加载4
- 包5
- 包3
等等
如您所见,Packs 可以在其他 Packs 中,而那些也可以在其他 Packs 中,并且在链的末端,有 Loads。 Pack 和 Load 实体完全不同,它们唯一的共同点是它们是上述树结构的一部分。 我试图通过创建一个基本抽象类(StorageEntity)来实现这一点,Packs 并且负载可以继承。
StorageEntity 类将具有允许将对象用作树节点的字段:
public abstract class StorageEntity
{
public int ContainerId { get; set; }
public virtual StorageEntity Container { get; set; }
public virtual ICollection<StorageEntity> Content { get; set; }
}
我的问题:
-
我不知道如何使用实体框架进行这项工作。我试图使用流体 API 来配置机制,如下所示:
modelBuilder.Entity<StorageEntity>() .HasMany(p => p.Content) .WithOne(s => s.Container);
但是当我尝试添加迁移时出现错误:
The entity type 'StorageEntity' requires a primary key to be defined. If you intended to use a keyless entity type call 'HasNoKey()'.
如果我将 HasNoKey() 添加到配置中,我会得到一个空引用异常。
- 这种方法是否正确?有哪些替代方案?
【问题讨论】: