Entity framework 在查询中创建一个不存在的列

Entity framework creating a non existent column in the query

这让我困惑了很长一段时间,但当我的 entity framework 尝试执行 oracle 查询时,我一直收到无效标识符错误。有问题的 类 如下:

public class Projectship : ModelTrackingBase
{

    [Column("PROJECTID")]     
    public long ProjectId { get; set; }

    [Column("VISITID")]
    public long VisitId { get; set; } 

    public virtual Bpid Bpid { get; set; } //new
    public virtual Visit Visit { get; set; }

}

 public class Bpid : EntityIdBase
{
    [Column("BUDPRJID")]
    [MaxLength(38)]
    public string BPId { get; set; }

    [Column("DESCRIPTION")]
    [MaxLength(255)]
    public string Description { get; set; }

    [Column("CSTOBJ")]
    [MaxLength(255)]
    public string Custobj { get; set; }

    [Column("PVID")]
    [MaxLength(255)]
    public string Pvid { get; set; }
    public virtual ICollection<Projectship> Projectships { get; set; }  

    public IEnumerable<Visit> Visits
    {
        get { return Projectships.Select(p => p.Visit); }
    }

    [NotMapped]
    public string DisplayName
    {
        get { return string.Format("{0}: {1}", BPId , Description); }
    }

}

现在 EntityIdBase 具有以下内容:

public class EntityIdBase : EntityBase
    {
        [Column("ID")]
        public long Id { get; set; }
    }

它试图继续在查询中寻找列 Bpid_Id。有人知道吗?

Bpid_id是EF创建的,因为它不能自动判断关系。尝试添加注释:

[ForeignKey("ID")]
public virtual Bpid Bpid { get; set; } //new

您已在 Projectship class

中指定导航 属性

public virtual Bpid Bpid { get; set; }

您没有指定外键与导航 属性 一起使用,所以 Entity Framework 选择了一个外键,它选择了名称 Bpid_Id。它应该在数据库中。不应该是 "non-existent".

如果像这样添加外键,您可能会发现 Entity Framework 使用起来更容易:

public int BpidId { get; set; }

参考文献:

Why does Entity Framework Reinsert Existing Objects into My Database?

Making Do with Absent Foreign Keys