Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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_Entity Framework - Fatal编程技术网

C# 无法将属性配置为导航属性-实体框架

C# 无法将属性配置为导航属性-实体框架,c#,.net,entity-framework,C#,.net,Entity Framework,我不熟悉.net和实体框架。我有两个模型User和Request,它们如下所示 User.cs [Table("User")] public class User { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public DateTime Cre

我不熟悉.net和实体框架。我有两个模型
User
Request
,它们如下所示

User.cs

    [Table("User")]
    public class User
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }

        public DateTime CreateDate { get; set; }

        public bool IsActive { get; set; }
    }
Request.cs

    [Table("Request")]
    public class Request
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int RequestId { get; set; }

        [ForeignKey("UserId")]
        public int UserId { get; set; }

        public string Reason { get; set; }

        public DateTime CreateDate { get; set; }
    }
以下是我的Linq查询:

var requests = (from req in dbcontext.Request
                join user in dbcontext.User on req.UserId equals user.UserId
                select new RequestOptionsDTO 
                { 
                    RequestId = req.RequestId, 
                    UserId = req.UserId, 
                    Reason = req.Reason, 
                    CreateDate = req.CreateDate, 
                    UserIsActive = user.IsActive 
                }).ToList();
这是一个简单的查询,但我不断得到以下错误:

The property 'UserId' cannot be configured as a navigation property. 
The property must be a valid entity type and the property should have a non-abstract getter and setter.
For collection properties the type must implement ICollection<T> where T is a valid entity type.
属性“UserId”不能配置为导航属性。
该属性必须是有效的实体类型,并且该属性应该具有非抽象的getter和setter。
对于集合属性,类型必须实现ICollection,其中T是有效的实体类型。
我在ASP.NETCoreWebAPI项目中运行了相同的查询,该项目使用EntityFrameworkCoreV3.1,运行良好

问题是相同的查询在使用EntityFramework6的控制台应用程序上不起作用


有人能帮我解决这个问题吗?

问题不在于查询,而在于模型(模型在第一次执行查询时是惰性初始化的,因此对于来自该DbContext的任何查询,您都会得到相同的异常)

问题的实际原因是无效的
ForeignKey
属性。当应用于FK属性时(如在您的场景中),它需要关联导航属性的名称。当应用于导航属性时,它需要FK属性的名称

在本例中,“UserId”不是
Request
类中导航属性的有效名称,这是错误消息试图以其独特的方式告诉您的

EF Core只是忽略了这些不一致,而EF6则按其应该的方式抛出异常。两者都不允许使用数据注释定义不带导航属性的关系。然而,EF Core允许流畅地定义这种关系,而EF至少需要一个导航属性

因此,为了定义FK关系,您需要至少添加

public User User { get; set; }
请求,或

public ICollection<Request> Requests { get; set; }
公共ICollection请求{get;set;}
发送到
用户
,或两者都发送。在这两种情况下,都不需要额外的数据注释/fluent配置


当然,不要忘记删除无效的
ForeignKey
属性。

问题不在于查询,而在于模型(模型在第一次执行查询时被延迟初始化,因此对于来自该DbContext的任何查询,您都会得到相同的异常)

问题的实际原因是无效的
ForeignKey
属性。当应用于FK属性时(如在您的场景中),它需要关联导航属性的名称。当应用于导航属性时,它需要FK属性的名称

在本例中,“UserId”不是
Request
类中导航属性的有效名称,这是错误消息试图以其独特的方式告诉您的

EF Core只是忽略了这些不一致,而EF6则按其应该的方式抛出异常。两者都不允许使用数据注释定义不带导航属性的关系。然而,EF Core允许流畅地定义这种关系,而EF至少需要一个导航属性

因此,为了定义FK关系,您需要至少添加

public User User { get; set; }
请求,或

public ICollection<Request> Requests { get; set; }
公共ICollection请求{get;set;}
发送到
用户
,或两者都发送。在这两种情况下,都不需要额外的数据注释/fluent配置


当然,不要忘记删除无效的
ForeignKey
属性。

EF6或EF-Core?@IvanStoev EF6。我在ASP.NETCoreWebAPI项目中运行了相同的查询,该项目使用EntityFrameworkCoreV3.1,运行良好。问题是相同的查询在使用EntityFramework6的控制台应用程序上不起作用。我已经在我的问题EF6或EF Core?@IvanStoev EF6中更新了相同的内容。我在ASP.NETCoreWebAPI项目中运行了相同的查询,该项目使用EntityFrameworkCoreV3.1,运行良好。问题是相同的查询在使用EntityFramework6的控制台应用程序上不起作用。我已经在我的问题中更新了相同的内容。我尝试过你的解决方案,但仍然会遇到相同的错误。在发布之前,我已经在我的clean test EF6环境中尝试过,错误消失了。确保已删除
[ForeignKey(“UserId”)]
行。还要检查其他实体的相似属性——正如我所说的,查询不重要,您必须清理模型。如果需要,从一个干净的项目开始,添加类/属性/配置,直到
addmigration
命令成功完成。我无能为力-错误已被复制并修复。顺便说一句,一旦我删除
[ForeignKey(“UserId”)]
行,我会收到一个类似的错误,但它正在抱怨
RequestId
<代码>属性“RequestId”不能配置为导航属性。该属性必须是有效的实体类型,并且该属性应该具有非抽象的getter和setter。对于集合属性,该类型必须实现ICollection,其中T是有效的实体类型。“Btw”只是证明原来的问题已经解决,现在您得到了类似但不同的错误。只需执行相同的操作-在代码中查找
[ForeignKey(“RequestId”)]
,将其删除并添加导航属性等。重复所有类似错误-异常消息告诉无效的
ForeignKey
属性(
UserId
RequestId
),您只需找到它们并应用上述解决方案,这显然是因为根据SO规则,只覆盖了原始的post问题。这就解决了它!我刚刚开始在.net上工作,对大多数术语我都是新手。很抱歉,没有理解它早些时候,并感谢您解释它的细节!再次感谢!!我已经尝试过你的解决方案,但仍然会遇到同样的错误。在发布之前,我已经在我的clean test EF6环境中尝试过了,错误消失了。你一定要