【问题标题】:How to model one way one-to-one in Fluent EF?如何在 Fluent EF 中一对一地建模一种方式?
【发布时间】:2023-03-31 12:42:01
【问题描述】:

假设我有以下实体:

Box
  Id
  Crank crank // has one required relationship 

Crank
  Id   // does not care about the box

定义 BoxMap 的正确方法是什么?这足够了吗?或者我需要WithRequiredPrincipal(我不知道它是做什么的):

HasKey(t => t.Id);
ToTable("Boxes")
Property(t=>t.Id).HasColumnName("Id")
Property(t=>t.CrankId).HasColumnName("Crank_Id")
HasRequired(t=>t.Crank)

注意:欢迎任何关于学习 fluent api 的好资源。谢谢。

【问题讨论】:

标签: entity-framework fluent-entity-framework


【解决方案1】:
public class Context : DbContext
{
    public DbSet<Box> Boxes { get; set; }
    public DbSet<Crank> Cranks { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<Box>()
            .HasRequired(m => m.Crank)
            .WithOptional()
            .Map(m => m.MapKey("Crank_Id"));

        base.OnModelCreating(modelBuilder);
    }
}

public class Box
{
    public int Id { get; set; }
    public Crank Crank { get; set; } // has one required relationship 
}

public class Crank
{
    public int Id { get; set; }
}

您无需指定:

HasKey(t => t.Id);
ToTable("Boxes")
Property(t=>t.Id).HasColumnName("Id")
Property(t=>t.CrankId).HasColumnName("Crank_Id")
HasRequired(t=>t.Crank)

它将按照 EF 的约定进行检测。

【讨论】:

  • 好吧,我的意思是你确实指定了HasRequired(这是我所拥有的)。你添加的额外内容是WithOptional——你能解释一下它的作用吗?
  • 是一对零或一对关系。 WithOptional 表示 Crank 可以与 Box 有一个或零个关系。 stackoverflow.com/a/5423308/1219444 - 相同情况的更多解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2020-04-06
  • 1970-01-01
相关资源
最近更新 更多