Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心为一对零,或者两个实体都可以独立存在时为一_C#_.net Core_Entity Framework Core - Fatal编程技术网

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

C# 实体框架核心为一对零,或者两个实体都可以独立存在时为一,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我有两个不同的实体,两者都可以独立生活:联系人可以是一个人、一家公司、一所学校等,而教师不是真正的,而是为了理解问题 这两个实体都可以存在于数据库中,而不相互引用。但是,教师可能是也可能不是联系人。我有物业联系人身份证吗?在数据库中的Teacher和对应的nullable字段上,但没有定义FK,我不知道是什么,不确定我是否可以更改它,也不确定它在这里是否重要 当我检索联系人时,我想检索教师记录(如果它存在并且不工作)。目前没有错误,但它没有检索教师数据。以下是我的课程: public parti

我有两个不同的实体,两者都可以独立生活:联系人可以是一个人、一家公司、一所学校等,而教师不是真正的,而是为了理解问题

这两个实体都可以存在于数据库中,而不相互引用。但是,教师可能是也可能不是联系人。我有物业联系人身份证吗?在数据库中的Teacher和对应的nullable字段上,但没有定义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; }
}

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

抱歉,目前无法发表评论,请添加此作为回答

您的数据是否正确地存储在数据库中?如果是,那么这只是一个查询问题。请记住,您需要显式加载。包括要从数据库检索的属性。不幸的是,目前实体框架不像以前的版本那样具有延迟加载

例如:

.Include(contact => contact.Teacher)
.Include(teacher => teacher.Contact)

如果您处理的是ICollection或ICollection,您可以使用相同的include属性,但子属性可能不会在Intellisense中显示。

很抱歉,无法评论,因此请将此添加为答案

您的数据是否正确地存储在数据库中?如果是,那么这只是一个查询问题。请记住,您需要显式加载。包括要从数据库检索的属性。不幸的是,目前实体框架不像以前的版本那样具有延迟加载

例如:

.Include(contact => contact.Teacher)
.Include(teacher => teacher.Contact)

如果处理ICollection或ICollection,则可以使用相同的include属性,但子属性可能不会在Intellisense中显示。

public int TId{get;set;}//不要询问属性名称:我将询问此属性名称。为什么它没有正确地映射。您的POCO应该清除数据库的愚蠢。这就是为什么它被称为ORM。对我来说,它与ef core 1.1.1.0一起工作。EF使用您的类创建了一个数据库,包括一个唯一的索引IX_Teachers_ContactId,并添加了一些数据。接下来,我删除了ContextId上的FK约束,并成功地查询了context.Contacts.Includec=>c.Teacher。感谢您的努力,@GertArnold!原来数据库中的字段是bigint而不是int:sigh legacy数据库。这也属于你,阿伦!您可能需要检查数据库是否具有此唯一索引以强制执行1:1。如果有的话,遗留问题也没那么糟糕:public int TId{get;set;}//不要问属性名:我要问这个属性名。为什么它没有正确地映射。您的POCO应该清除数据库的愚蠢。这就是为什么它被称为ORM。对我来说,它与ef core 1.1.1.0一起工作。EF使用您的类创建了一个数据库,包括一个唯一的索引IX_Teachers_ContactId,并添加了一些数据。接下来,我删除了ContextId上的FK约束,并成功地查询了context.Contacts.Includec=>c.Teacher。感谢您的努力,@GertArnold!原来数据库中的字段是bigint而不是int:sigh legacy数据库。这也属于你,阿伦!您可能需要检查数据库是否具有此唯一索引以强制执行1:1。如果有,遗产也没那么糟糕:谢谢你的回复!我曾经尝试过这个方法,但出现了一个错误,但现在重新检查该错误时,我看到了现场教师。ContactId是bigint而不是int。我更改了它,它成功了:谢谢你的回复!我曾经尝试过这个方法,但出现了一个错误,但现在重新检查该错误时,我看到了现场教师。ContactId是bigint而不是int。我更改了它,它成功了: