【问题标题】:Entity Framework Core: foreign key and reference table Id column do not matchEntity Framework Core:外键和引用表 Id 列不匹配
【发布时间】:2021-12-01 09:02:50
【问题描述】:

我目前正在使用 EF Core 5 进行开发。我有一个现有的数据库,因此更改列可能不是一个好的选择。

例如我有两个表:

public class CalssA
{
    public long AId { get; set; }
    public long TheBId { get; set; }
    [Foreign("TheBId")]
    public virtual ClassB B { get; set; }
}

public class ClassB
{
    public long BId { get; set; }

    [InverseProperty(nameof(CalssA.B))]
    public virtual ICollection<ClassA> Aas {get;set;}
}

当我尝试用 B 获取 A 数据时,似乎 B 信息未加入 A。

var a = _AContext.As.Include(a => a.B).FirstOrDefault();
var b = a.B // get null

是加入问题吗?我应该如何指定要加入 EF Core 的列?

谢谢

【问题讨论】:

    标签: c# sql-server entity-framework-core


    【解决方案1】:

    你必须添加导航属性

    
    public class ClassA
    {  
        [Key]
        public long AId { get; set; }
    
        public long? TheBId { get; set; }
        [ForeignKey( nameOf(TheBId))]
        [InverseProperty(nameOf(ClassB.Aas))] 
        public virtual ClassB B { get; set; }
    }
    public class ClassB
    {
        [Key]
        public long BId { get; set; }
        
      
          [InverseProperty(nameof(ClassA.B))]
        public virtual ICollection<ClassA>  Aas {get; set;} //one-to-many
    }
    

    你可以尝试添加到dbcontext

    modelBuilder.Entity<ClassA>(entity =>
                {
                    entity.HasOne(d => d.B)
                       .WithMany(p => p.Aas)
                       .HasForeignKey(d => d.TheBId);
                      
                });
    

    【讨论】:

    • 感谢您的回答,我尝试了您的方法,但属性 B 仍然为空。我使用[InverseProperty(nameof(A.B))] public virtual ICollection&lt;A&gt; Aas {get; set;}[InverseProperty("Aas")]
    • @jamesaq12wsx 它应该可以工作。因为它是一个简单的基本配置。恐怕您将不得不删除数据库的迁移文件夹和迁移表。在此之后,您将重复初始迁移到数据库,并且只有在此之后再试一次
    • 嗨@Serge,我这次没有使用ef core的迁移功能,因为数据库已经存在了。
    • @jamesaq12wsx 一切正常,您只是忘记将 [InverseProperty(nameOf(ClassB.Aas))] 添加到 ClassA
    • 是的,一切都应该和我现在的回答一样。只有 [ForeignKey( nameOf(BId))] 不正确。应该是 [ForeignKey(nameOf(TheBId))]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2017-02-17
    • 2018-09-28
    • 2016-12-16
    相关资源
    最近更新 更多