当两个实体可以独立存在时,实体框架核心为一对一或零

Ale*_* B. 1 c# entity-framework-core .net-core

我有两个不同的实体,两者都可以没有其他实体:联系(可以是一个人,一个公司,一个学校等)和老师(不是真的,但为了理解问题).

两个实体都可以存在于数据库中,彼此之间没有引用.但是,教师可能是也可能不是联系人.我有房产ContactId?在教师和数据库上相应的可空字段,但没有定义FK(不知道是什么,不知道我是否可以改变这一点,也不知道这里是否重要).

当我检索联系人时,我想检索教师记录(如果它存在),并且它不起作用.目前没有错误,但它没有检索教师数据.这是我的课程:

public partial class Contact
{
    public int Id { get; set; }

    [InverseProperty("Contact")]
    public virtual Teacher Teacher { get; set; }
}

public partial class Teacher
{
    public int TId { get; set; } // don't ask about the property name :(

    public int? ContactId { get; set; }

    [ForeignKey("ContactId")]
    [InverseProperty("Teacher")]
    public virtual Contact Contact { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助或想法将不胜感激!

小智 5

对不起,还不能评论,所以添加这个作为答案.

您的数据是否正确存储在数据库中?如果是,那么它只是一个查询问题.请记住,您需要显式加载(.Include)要从数据库中检索的属性.不幸的是,此时Entity Framework没有像以前的版本一样进行延迟加载.

例:

.Include(contact => contact.Teacher)
.Include(teacher => teacher.Contact)
Run Code Online (Sandbox Code Playgroud)

如果您正在处理ICollection<Contact>或者ICollection<Teacher>您可以使用相同的包含属性,但子属性可能不会显示在Intellisense中.

  • 谢谢回复!我曾尝试过这个,但是出现了错误,但现在重新检查错误,我看到字段Teacher.ContactId是bigint而不是int.我改变了它,它起作用了.:( (2认同)