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?
这让我困惑了很长一段时间,但当我的 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?