【问题标题】:Allow a foreign key to be null with Entity Type Builder使用实体类型生成器允许外键为空
【发布时间】:2019-10-16 11:10:56
【问题描述】:

我需要一个外键为空,如何使用实体配置来做到这一点?

 public void Configure(EntityTypeBuilder<CostCenter> entity)
        {
            entity.ToTable("CostCenter", ApplicationDataContext.DEFAULT_SCHEMA);

            entity.Property(e => e.Id).ValueGeneratedNever();

            entity.Property(e => e.Name)
                .IsRequired()
                .HasMaxLength(150)
                .IsUnicode(false);

            entity.Property(e => e.Uid).HasColumnName("UID");

            
            entity.Property(e => e.UpdatedBy)
                .IsRequired()
                .HasMaxLength(250)
                .IsUnicode(false);

            entity.Property(e => e.UpdatedOn).HasColumnType("datetime");

                
                
        }

现在我需要使这个属性为空

entity.HasOne(e => e.Owner)
                .WithMany()
                .HasForeignKey(d => d.OwnerId)
                .HasConstraintName("FK_CostCenter_Account_OwnerId");

【问题讨论】:

标签: c# entity-framework


【解决方案1】:

我认为您想配置如果CostCenter 有一个空 OwnerId,那么CostCenter 没有Owner

显然有些CostCentersOwners,而有些则没有:Owner 是可选的。这是一个零或一对多的关系。

public void Configure(EntityTypeBuilder<CostCenter> costCenterEntity)
{
    ...

    costCenterEntity.HasOptional(costCenter => costCenter.OwnerId)                    // The owner is optional
        .WithMany(owner => owner.CostCenters)  // the owner has zero or more CostCenters
        .HasForeignKey(costCenter => costCenter.OwnerId)
}

您可能需要将 OwnerId 定义为可为空的属性

【讨论】:

  • 当我使用 HasOptional 时,它不是属性
  • 我在 EntityTypeBuilder 中找不到 HasOption 方法
  • 完整实体框架 DbContext,具有方法 OnModelCreating 和 DbModelBuilder 类型的参数。这有一个 EntityTypeConfiguration 类型的属性实体,它有方法HasOptional。使用实体框架核心?访问Equivalent for HasOptional in EF Core
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多