C# 仅在一侧具有导航属性的一对多关系?

C# 仅在一侧具有导航属性的一对多关系?,c#,entity-framework,.net-core,entity-framework-core,ef-fluent-api,C#,Entity Framework,.net Core,Entity Framework Core,Ef Fluent Api,我在两个表之间有非常好的一对多关系:Play和Player: public class Player { public int PlayerId { get; set; } public string Name { get; set; } public ICollection<Play> Plays { get; set; } } public class Play { public int PlayId { get; set; } pu

我在两个表之间有非常好的一对多关系:
Play
Player

public class Player
{
    public int PlayerId { get; set; }
    public string Name { get; set; }

    public ICollection<Play> Plays { get; set; }
}

public class Play
{
    public int PlayId { get; set; }

    public int PlayerId { get; set; }
    public Player Player { get; set; }
}

modelBuilder.Entity<Play>()
    .HasOne<Player>(p => p.Player)
    .WithMany(p => p.Plays)
    .OnDelete(DeleteBehavior.Cascade)
    .HasForeignKey(p => p.PlayerId)
    .IsRequired();
我有两个具体的问题:

  • 有可能做到吗
  • 在不依赖EF核心约定的情况下(例如,“Id”是主键等)是否可以执行此操作。。。?(这意味着,所有内容都是明确的,无论是在fluent API中还是作为注释)
  • 是否可以省略侧面的导航属性?例如,从
    播放器
    中删除
    播放
    集合

    绝对可能。编写实体配置,如下所示:

    modelBuilder.Entity<Play>()
        .HasOne<Player>(p => p.Player)
        .WithMany() // <-- Here it is
        .HasForeignKey(p => p.PlayerId)
        .OnDelete(DeleteBehavior.Cascade)
        .IsRequired();
    
    modelBuilder.Entity()
    .HasOne(p=>p.Player)
    .WithMany()//p.PlayerId)
    .OnDelete(DeleteBehavior.Cascade)
    .IsRequired();
    
    在不依赖EF核心约定的情况下(例如,“Id”是主键等)是否可以执行此操作。。。?(这意味着,所有内容都是明确的,无论是在fluent API中还是作为注释)

    不!没有fluentapi是不可能的

    是否可以省略侧面的导航属性?例如,从
    播放器
    中删除
    播放
    集合

    绝对可能。编写实体配置,如下所示:

    modelBuilder.Entity<Play>()
        .HasOne<Player>(p => p.Player)
        .WithMany() // <-- Here it is
        .HasForeignKey(p => p.PlayerId)
        .OnDelete(DeleteBehavior.Cascade)
        .IsRequired();
    
    modelBuilder.Entity()
    .HasOne(p=>p.Player)
    .WithMany()//p.PlayerId)
    .OnDelete(DeleteBehavior.Cascade)
    .IsRequired();
    
    在不依赖EF核心约定的情况下(例如,“Id”是主键等)是否可以执行此操作。。。?(这意味着,所有内容都是明确的,无论是在fluent API中还是作为注释)


    不!如果没有Fluent API,这是不可能的。

    我知道EF Core有一些约定,因此您不必用Fluent API编写任何代码。类似于属性
    Id
    EFCore将创建PK,不带注释或FluentAPI。我不想得到这样的答案:“你不必这么做,因为EFCore会自动使用它的约定来解释它”@TanvirArjel,但看起来你的答案就是我想要的答案。ThanksI知道EF Core有一些约定,所以您不必在fluent API中编写任何代码。类似于属性
    Id
    EFCore将创建PK,不带注释或FluentAPI。我不想得到这样的答案:“你不必这么做,因为EFCore会自动使用它的约定来解释它”@TanvirArjel,但看起来你的答案就是我想要的答案。谢谢