在实体框架的另一端,如果没有Collection属性,可以有多对多和一对多吗



这是我当前的工作解决方案:

public class Person
{
public ICollection<Foo> Foos { get; set; }
public Foo BonusFoo { get; set; }
}
public class Foo
{        
public ICollection<Person> Persons { get; set; }
public ICollection<Person> Persons2 { get; set; }
}
public class MemContext : DbContext
{
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasMany(b => b.Foos)
.WithMany(o => o.Persons);
modelBuilder.Entity<Person>()
.HasOne(o => o.BonusFoo)
.WithMany(o => o.Persons2);
base.OnModelCreating(modelBuilder);
}
}

我将永远不需要访问代码Foo.PersonsFoo.Persons2,是否可以具有相同的配置,但在Foo上没有这两个属性?

一对多的答案是肯定的(是(。从Foo中删除Persons2属性,并使用不传递导航属性的WithMany(因为没有(:

modelBuilder.Entity<Person>()
.HasOne(o => o.BonusFoo)
.WithMany(); // <--

目前,多对多的答案是否定的(没有((EF Core 5,6(,如多对多文档开头所述:

多对多关系需要两侧的集合导航属性

在即将推出的EF Core 7中,这是可能的-通过影子导航#3864支持单向多对多关系。

在此之前,请在模型中保留Person.FoosFoo.Persons集合属性(即使您"不需要"后者(和现有的fluent配置。

最新更新