C# 一对一关系实体框架出错

C# 一对一关系实体框架出错,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,您好: 我试图使用实体框架实现一对一映射,但出现以下错误: 外键组件“Id”不是类型的声明属性 “用户上传”。验证是否未将其明确排除在 模型,并且它是有效的基元属性 下面是我的代码: public abstract class Upload { [Key] [Ignore] public virtual Guid Id { get; set; } public string Path { get; set; }

您好:

我试图使用实体框架实现一对一映射,但出现以下错误:

外键组件“Id”不是类型的声明属性 “用户上传”。验证是否未将其明确排除在 模型,并且它是有效的基元属性

下面是我的代码:

 public abstract class Upload 
    {
        [Key]
        [Ignore]
        public virtual Guid Id { get; set; }

        public string Path { get; set; }

        public string Name { get; set; }

        public long   Size { get; set; }

        public UploadTypes Type { get; set; }

        [Ignore]
        [Timestamp]
        public byte[] RowVersion { get; set; }
    }
以及我的子类:

   public class UserUpload : Upload
    {
        [Key]
        [ForeignKey("User")]
        public override Guid Id { get { return base.Id; } set { base.Id = value; } }


        public ApplicationUser User { get; set; }

    }
在我的抽象类中,我有
[Ignore]
,因为我希望NEST忽略属性(ElasticSearch依赖项)。我需要这个实体框架(我的UserUpload)

验证它是否未从模型中明确排除


您已明确将其从模型中排除。

我建议在modelbuilder中为该模型添加密钥配置。我发现在那里写模型配置通常是一个更好的选择

最后,检查:'并且它是一个有效的基元属性。'


Guid不是基元,请改用int。

如果您要做的只是忽略它,为什么要在抽象类中声明一个键?[ignore]是用于NEST(ElasticSearch)的。我认为这在理论上不会影响实体框架。您已经编辑了您的问题,并给出了一个有效答案。废弃。[ignore]是用于NEST的(ElasticSearch)我认为这在理论上不会影响实体框架。[Ignore]也被EF用来在模型中不包含属性。这听起来像是为了不同的目的重复使用数据模型。最好不要这样做:-)是的,这就是我想要实现的。实体框架的派生类UserUpload和嵌套的另一个派生类(elasticsearch)。不要这样做。有两种不同的型号。它们可能/看起来/相同,但实际上,它们有不同的用途,因此应该有不同的类。我从抽象基中删除了[Ignore],但仍然得到相同的错误。
[Ignore]
[Key]
public virtual Guid Id { get; set; }