Entity framework 实体框架:列名无效';组织结构ID';
我获取:错误:列名“OrganizationStructure\u ID”无效Entity framework 实体框架:列名无效';组织结构ID';,entity-framework,Entity Framework,我获取:错误:列名“OrganizationStructure\u ID”无效 public OrganizationStructure() { ChildrenItems = new HashSet<OrganizationStructure>(); InputDate = DateTime.Now; } public int ID { get; set; } public string Name { get
public OrganizationStructure()
{
ChildrenItems = new HashSet<OrganizationStructure>();
InputDate = DateTime.Now;
}
public int ID { get; set; }
public string Name { get; set; }
public virtual int? ParentID { get; set; }
public int OrganizationID { get; set; }
public int OrganizationTypeID { get; set; }
public int OrganizationActivityID { get; set; }
public int OrganizationLocationID { get; set; }
public string AddRemark { get; set; }
public int UserId { get; set; }
public DateTime InputDate { get; set; }
public int? RemAttr { get; set; }
public virtual ICollection<OrganizationStructure> ChildrenItems { get; set; }
这是因为您没有将FK属性与导航属性配对。我希望
ParentID
应该指向parentOrganizationStructure
,ChildrenItems
应该指向childrenorganizationstructures
如果您的模型不包含父级Parent
导航属性到父级OrganizationStructure
,则必须使用fluent API告诉EFParentID
是FK:
modelBuilder.Entity<OrganizationStructure>()
.HasMany(o => o.ChildrenItems)
.WithOptional()
.HasForeignKey(c => c.ParentID);
modelBuilder.Entity()
.HasMany(o=>o.ChildrenItems)
.WithOptional()
.HasForeignKey(c=>c.ParentID);
我发现,当您有一个ICollection引用一个表,而它没有可以找出的列时,它会创建一个供您尝试在表之间建立连接的列。这在ICollection中特别发生,让我“疯狂”地试图解决它。我遇到了一个类似的问题,删除了公共虚拟ICollection的不需要的条目,解决了它。如果您将子实体中的引用字段声明为简单字段,而不是属性,也可能是这样
int ParentId //will be ignored;
int ParentId {get; set;} // it'ok (but could be ignored
//if the parent entity name isn't 'Parent');
[ForeignKey("MyParentEntity")]
int ParentId {get; set;} // is the best way (or use fluent-api)
如果这是一个测试项目,请确保更新了测试项目的连接字符串我已将该项目升级到较新版本的.Net Framework,因此我认为与Entity Framework库存在冲突,卸载/安装Entity Framework对我有效
uninstall-package entityframework
install-package entityframework
转到SQL server管理->工具->SQL server探查器 启动一个分析器。使用橡皮擦清除所有事件。 使用Postman发送请求,或者只调用Queryable来执行Sql命令 从探查器复制生成的查询并粘贴到SQL server管理中(为了在SQL语句中转换此字符串,您必须做一些小的更改,将参数从末尾移动到变量)
执行查询,您将看到哪个表需要此列。是
OrganizationStructure
一个实体(来自EF?)您得到的异常是什么?EF,异常:无效的列名“OrganizationStructure\u ID”显然,名为的自动外键在某个点从{entity}ID更改为{entity}\u ID。EF5可能。@boomhauer:在派生的DbContext
类中重写OnModelCreating
方法,并将所有映射放在那里。另一个选项是使用EntityTypeConfiguration
派生类,并在OnModelCreating
中注册它。不过,我知道如何将foreignkey attibute添加到为我处理此问题的模型中。但是thanks@boomhauer,你把什么外键属性放在哪里了?有没有办法关闭魔法。我有一个带有HasForeignKey的映射文件,但仍然会出现此错误。我认为有一个特定的映射文件会禁用约定wireup?这也可能是因为您将子实体中的引用字段声明为简单字段,而不是属性!int ParentId-将被忽略;int ParentId{get;set;}-it'ok(但如果父实体名称不是'parent',则可以忽略);[ForeignKey(“MyParentEntity”)]intparentid{get;set;}-最好的方法(或使用fluentapi)在这里也是一样的,这让我很痛苦,直到我发现它对我有用。谢谢
uninstall-package entityframework
install-package entityframework