微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF Core-用外键连接两个表

如何解决EF Core-用外键连接两个表

我有两个要通过字符串键连接的EF Core实体,但不遵循id-name-convention。像这样的简单DbContext:

public DbSet<Entity1> Table1 { get; set; }
public DbSet<Entity2> Table2 { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entity1>()
                .HasOne(s => s.Entity2) 
                .WithOne()
                .HasForeignKey<Entity1>(s => s.Name); 
}

public class Entity1
{
    public String Name{ get; set; }
    public Entity2 Entity2 { get; set; }
}

public class Entity2
{
    [Key]
    public String Nummer { get; set; }
}

它不会引发任何错误-但是查询数据时,“ Entity2”属性始终为空-即使表2中存在一个数据集,其中“数字”等于Entity1的“名称”值。

我还尝试了不带OnModelCreating-Code的ForeignKey属性-但结果相同。

我认为,我对EF核心中的外键概念有完全的误解。

有什么想法或提示吗?

解决方法

问题可能出在查询过程中。您如何查询数据。除非您通过(?<=[\w])(?:_([a-z]))([^_"]*+)(?!"\s)|"_([a-z]+)" 明确指定,否则EFCore默认不会进行联接查询。例如,

Include()

var entity1 = db.Table1 .Where(x=>x.Name == "test") .Include(x=>x.Entity2) <--- watch this .First(); 指定两个表之间存在联接查询,并且返回的Include(x=>x.Entity2)对象包含Entity1的数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。