【问题标题】:What is the proper way to have unary relationship in EF-core code first?首先在 EF-core 代码中建立一元关系的正确方法是什么?
【发布时间】:2020-01-14 07:10:34
【问题描述】:

我有一个目标实体,我将其设为一元,因为一个目标可以有另一个目标。 例如。 A点-> B点-> C点

我已尝试创建适当的实体类。

    public class Destination
    {
        public int DestinationId { get; set; }
        public Destination NextDestination { get; set; }
        public float Distance { get; set; }
        public DateTime ExpectedArrival { get; set; }
        public DateTime ActualArrival { get; set; }
    }

没有错误,但我得到的是

Destination
NextDestinationDestinationId
Distance
ExpectedArrival
ActualArrival

无论如何我可以让它喜欢称它为“Destination.NextDestinationId”

【问题讨论】:

  • 那么,要自定义生成的外键的名称吗?
  • 是的,但我收到错误“成员名称不能与其封闭类型相同
  • 你是先使用代码吗?
  • 是的。然后添加迁移,更新数据库,然后我只在 MSSMS 中查看图表,如果它与我的 E-R 图表相同。

标签: c# sqlite ef-code-first entity-framework-core


【解决方案1】:
public class Destination
    {
        public int DestinationId { get; set; }
        public int PreviousDestinationId { get; set; }

        public virtual Destination Previous { get; set; }
        public virtual Destination Next{ get; set; }
    }

    public class DestinationConfiguration : IEntityTypeConfiguration<Destination>
    {
        public void Configure(EntityTypeBuilder<Destination> builder)
        {
            builder
                .HasOne(p => p.Previous)
                .WithOne(p => p.Next)
                .HasForeignKey(p => p.PreviousDestinationId)
                .OnDelete(DeleteBehavior.Restrict);

        }
    }

【讨论】:

    【解决方案2】:

    您可以在 Fluent API 中配置自定义外键名称:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    
        modelBuilder.Entity<Destination>()
         .HasRequired(w => w.Destination)
         .WithMany()
         .Map(m => m.MapKey("NextDestinationId"));
    }
    

    这会将您的列命名为“NextDestinationId”而不是“NextDestinationDestinationId”。

    我不知道您是否需要 .WithMany() 或其他配置,这取决于您。

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多