【发布时间】:2020-11-19 18:13:41
【问题描述】:
我正在尝试使用 EF Core 跟踪 DDD,在我的模型中我有以下内容:
private List<TeamPerson> _personLinks;
public IReadOnlyCollection<TeamPerson> PersonLinks => _personLinks?.ToList().AsReadOnly();
public IReadOnlyCollection<Person> Members => _personLinks?.Select(l => l.Person).ToList().AsReadOnly();
我想封装 Team 和 Person 模型之间的关系。我必须马上说,有一个 Person 模型的映射并且它可以工作。
但是如果我指定属性访问模式:
builder.HasMany(e => e.PersonLinks)
.WithOne(e => e.Team)
.HasForeignKey(e => e.TeamId)
.Metadata.PrincipalToDependent.SetPropertyAccessMode(PropertyAccessMode.Field);
builder.HasMany(e => e.TeamLinks)
.WithOne(e => e.Person)
.HasForeignKey(e => e.PersonId)
.Metadata.PrincipalToDependent.SetPropertyAccessMode(PropertyAccessMode.Field);
如果我尝试获取 dbContext.Teams.Include(t => t.PersonLinks).ThenInclude(t => t.Person),我会收到错误消息:“...PersonId1 列不存在...”,我有这个用于 TeamPerson 模型映射:
builder.Property(e => e.PersonId).IsRequired().HasColumnName("person_id");
我的错误是什么,或者有没有其他方法可以在这里达到集合的封装?
【问题讨论】:
-
DDD与这个问题无关,只是说...
标签: c# postgresql entity-framework domain-driven-design ef-core-3.1