Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# EF Core:找不到实体类型的属性的支持字段,该属性没有getter_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

C# EF Core:找不到实体类型的属性的支持字段,该属性没有getter

C# EF Core:找不到实体类型的属性的支持字段,该属性没有getter,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我在EF Core中发现以下错误:找不到实体类型为“Child”的属性“ParentId”的支持字段,并且该属性没有getter 这是我对子实体的配置: // create shadow property for Parent builder.Property<int>("ParentId").IsRequired(); // make shadow property and foreign

我在EF Core中发现以下错误:找不到实体类型为“Child”的属性“ParentId”的支持字段,并且该属性没有getter

这是我对子实体的配置:

            // create shadow property for Parent
            builder.Property<int>("ParentId").IsRequired();

            // make shadow property and foreign key the PK as well
            // i know this may not make the most sense here 
            // in this scenario but it's what I want to do.
            builder.HasKey("ParentId");

            // configure FK
            builder.HasOne(o => o.Parent)
                .WithOne()
                .HasForeignKey<Child>("ParentId");
调用dbContext.Children.ContainsmyChild时出错:

var child = new Child();
child.Parent = new Parent();

dbContext.Children.Add(child);
dbContext.SaveChanges();

// works fine
Assert.True(dbContext.Children.Any());

// throws InvalidOperationException
Assert.True(dbContext.Children.Contains(myChild)):

如果将阴影属性作为真实属性添加到模型中,如下所示:

public class Child 
{
    public int ParentId { get; set;} 

    public Parent Parent { get; private set; }

    public void SetParent(Parent p) => Parent = p;
}

然后一切都开始了。但如果可能的话,我想保留它作为影子财产

public class Child 
{
    public int ParentId{get;set;}
    public Parent Parent { get; private set; }

    public void SetParent(Parent p) => Parent = p;
}
您应该定义外键变量,并记住私有集不会在db中创建关系

您应该定义外键变量,并记住私有集不会在db中创建关系更新:

刚刚检查了3天前发布的EF Core 3.1.7,异常消失,这意味着它已被报告/识别并修复。因此,您可以简单地升级到该版本

原件:

阴影属性的配置很好。不幸的是,您遇到了EF Core 3.x的一个bug

为了将Contains方法转换为SQL,EF-Core必须将其转换为PK相等比较,类似于伪代码

dbContext.Children.Any(c => PK(c) == PK(myChild))
从异常堆栈跟踪中可以看出,当PK是shadow属性时,显然没有做到这一点

我已经检查了最新的在这个时候EF5预览,它似乎是固定的问题消失了。因此,在发布之前,解决方法是用相应的显式PK比较替换隐式实体相等比较,例如Containsentity、Equalsentity、==entity等

在这种情况下,而不是

dbContext.Children.Contains(child)
你可以用任何一种

dbContext.Children.Any(c => c.Parent.Id == child.Parent.Id)
由于另一个v3.x缺陷,SQL转换更糟糕

与v5.0中相同的正确SQL转换,但使用魔术字符串,并需要显式指定卷影属性名称和类型更新:

刚刚检查了3天前发布的EF Core 3.1.7,异常消失,这意味着它已被报告/识别并修复。因此,您可以简单地升级到该版本

原件:

阴影属性的配置很好。不幸的是,您遇到了EF Core 3.x的一个bug

为了将Contains方法转换为SQL,EF-Core必须将其转换为PK相等比较,类似于伪代码

dbContext.Children.Any(c => PK(c) == PK(myChild))
从异常堆栈跟踪中可以看出,当PK是shadow属性时,显然没有做到这一点

我已经检查了最新的在这个时候EF5预览,它似乎是固定的问题消失了。因此,在发布之前,解决方法是用相应的显式PK比较替换隐式实体相等比较,例如Containsentity、Equalsentity、==entity等

在这种情况下,而不是

dbContext.Children.Contains(child)
你可以用任何一种

dbContext.Children.Any(c => c.Parent.Id == child.Parent.Id)
由于另一个v3.x缺陷,SQL转换更糟糕


与v5.0中一样正确的SQL转换,但是使用了魔术字符串,并且需要显式指定阴影属性名称和类型?我看到你添加了我问题的最后一部分作为答案,但正如我所说,这是我试图避免的。我的配置指定了外键请参见问题的第一个片段我希望使用导航属性,根据MS文档,这是可能的。对不起,您能再解释一下吗?我看到你添加了我问题的最后一部分作为答案,但正如我所说,这是我试图避免的。我的配置指定了外键请参见问题的第一个片段我希望使用导航属性,根据MS文档,这是可能的。我非常钦佩你一次又一次地进入这个雷区的勇气。谢谢,我很高兴知道这是一个bug,而不是我做错了什么!我深深佩服你一次又一次闯入这个雷区的勇气。谢谢。我很高兴知道这是一只虫子,而不是我做错了什么!