【问题标题】:EF Core Fluent API statement as Data AnnotationEF Core Fluent API 语句作为数据注释
【发布时间】:2021-04-29 03:18:25
【问题描述】:

我可以在 EF Core 中使用数据注释来编写这个吗?

modelBuilder.Entity<DiagramComponent>()
                .HasOne(c => c.Compressor)
                .WithMany(c => c.Components);

【问题讨论】:

    标签: api entity-framework entity-framework-core annotations fluent


    【解决方案1】:

    你将不得不再创建一个类:

    public class DiagramComponentComponent
        {
            public int DiagramComponentId { get; set; }
            public int ComponentId { get; set; }
    
            [ForeignKey(nameof(DiagramComponentId))]
            public virtual DiagramComponent DiagramComponent { get; set; }
    
            [ForeignKey(nameof(ComponentId))]
            public virtual Component Component { get; set; }
        }
    

    并向现有类添加属性:

    public class DiagramComponent
        {
            public int CompressorId { get; set; }
    
            [ForeignKey(nameof(CompressorId))]
            [InverseProperty("DiagramComponents")]
            public virtual Compressor Compressor { get; set; }
    
    [InverseProperty(nameof(DiagramComponentComponent.DiagramComponent))]
    public virtual ICollection<DiagramComponentComponent> DiagramComponentComponents { get; set; }
        }
        public class Compressor
        {
            [InverseProperty(nameof(DiagramComponent.Compressor))]
            public virtual ICollection<DiagramComponent> DiagramComponents { get; set; }
    
        }
        public class Component
        {
    [InverseProperty(nameof(DiagramComponentComponent.Component))]
    public virtual ICollection<DiagramComponentComponent> DiagramComponentComponents { get; set; }
    
        }
    

    并添加到 dbcontext:

    modelBuilder.Entity<DiagramComponentComponent>(entity =>
                {
                    entity.HasOne(d => d.DiagramComponent )
                        .WithMany()
                        .HasForeignKey(d => d.DiagramComponentId )
                        .OnDelete(DeleteBehavior.ClientSetNull)
              .HasConstraintName("FK_DiagramComponentComponent_Component_Diagram");
    
                    entity.HasOne(d => d.Component)
                        .WithMany()
                        .HasForeignKey(d => d.ComponentId )
                        .OnDelete(DeleteBehavior.ClientSetNull)
                        .HasConstraintName("FK_DiagramComponentComponent_Component");
                });
    

    【讨论】:

    • @ora 感谢您对我仅几个小时的工作表示感谢。只要你接受答案就足够了。
    • 我在哪里可以接受答案?对于我的情况,只有 InverseProperty 是必需的。
    • 您必须点击答案标题下方的“检查”标志,然后点击向上箭头
    • 我有新的注释问题:modelBuilder.Entity() .HasOne(f => f.SecondClass) .WithOne(s => s.FirstClass) .HasForeignKey(f = > f.SecondClassId);如何制作。
    • 如果它很短,我们可以在这里讨论或接受这个答案并创建新帖子。我会回答你的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2018-08-18
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多