C#学习教程:ASP.NETMVC/entityframework错误–无效的列名称“Environment_Id”,希望这不是一个愚蠢的问题当我通过模型查看时我收到此错误–异常详细信息:System.Data.SqlClient.SqlException:无效列名称“Environment_Id”。模型或数据库表具有该名称的属性。可以指点我吗?**这里是版本模型类**publicpartialclassVersion{publicVersion(){this.ProfileVersions=newList();this.ServerInfoes=newList();}publicintId{得到;放;}publicstringNumber{get;放;}publicstringTag{get;放;}公共字符串所有者{得到;放;}publicstringApprover{get;放;}公共字符串描述{得到;放;}公共虚拟ICollectionProfileVersions{get;放;}公共虚拟ICollectionServerInfoes{get;放;}}**配置文件版本类**publicpartialclassProfileVersion{publicProfileVersion(){this.PlatformConfigurations=newList();}publicintId{得到;放;}publicintProfileId{得到;放;}publicintEnvironmentId{得到;放;}publicintVersionId{得到;放;}publicNullableLocked{get;放;}publicstringLockedBy{得到;放;}publicstringComments{get;放;}publicNullableActive{get;放;}publicvirtualEnvironmentEnvironment{get;放;}公开c虚拟ICollectionPlatformConfigurations{get;放;}publicvirtualPlatformProfilePlatformProfile{get;放;}publicvirtualVersionVersion{get;放;}}**ServerInfo**publicpartialclassServerInfo{publicServerInfo(){this.PlatformConfigurations=newList();}publicintId{得到;放;}publicstringServerName{get;放;}publicintProfileId{得到;放;}publicintVersionId{得到;放;}publicintEnvironmentId{得到;放;}publicstringServerType{get;放;}publicNullableActive{get;放;}公共字符串域{得到;放;}公共字符串位置{得到;放;}公共字符串IP{得到;放;}publicstringSubnet{get;放;}publicstringGateway{get;放;}publicNullableVLan{get;放;}公共字符串DNS{得到;放;}publicstringOS{get;放;}publicstringOSVersion{get;放;}publicstringFunc{得到;放;}publicNullableIISInstalled{get;放;}公共字符串ADDomainController{得到;放;}公共字符串ADOrganizationalUnit{得到;放;}publicstringADGroups{get;放;}publicstringLastError{get;放;}publicNullableLastUpdate{get;放;}publicvirtualEnvironmentEnvironment{get;放;}公共虚拟ICollectionPlatformConfigurations{get;放;}publicvirtualPlatformProfilePlatformProfile{get;放;}publicvirtualVersionVersion{get;放;}publicvirtualVMConfigurationVMConfiguration{get;放;}}**控制器代码-**publicViewResultIndex(stringid){varprofileVerList=fromverin_context.Versionswhere!(frompfvin_context.ProfileVersionsselectpfv.VersionId).Contains(ver.Id)selectver;varbigView=newBigViewModel{VersionModel=profileVerList.ToList(),};返回视图(模型:bigView);}**在抛出异常的View**@Html.DropDownList("SelectedVersionID",newSelectList(Model.VersionModel.Select(x=>new{Value=x.Id,Text=x.Number}),“值”、“特克斯t"))在您的ProfileVersion和ServerInfo实体中,您具有Environment导航属性默认情况下,实体框架将尝试创建一个名为[PropertyName]_[ReferencedclassPK]的数据库列。在您的场景中,即Environment_Id。现在的问题是,您还没有完成创建此数据库列的迁移。如果我不得不想象这里发生了什么,我会说您创建了具有EnvironmentId属性的类,进行了迁移,然后决定添加添加导航属性环境,期望EF将其与您现有的EnvironmentId属性相关联。这就是您出错的地方。如上所述,EF约定是查找名为Environment_Id的数据库列,因此如果您希望EF使用EnvironmentId,你只需要使用ForeignKey数据注释告诉它:[ForeignKey("Environment")]publicintEnvironmentId{get;set;}在我的例子中,我已经将我的主键关系添加到同一个键..所以我只是删除..我意识到这个问题现在已经有3年了,但我看到了错误的另一个原因-原始问题和我自己的代码都非常相似。此外,就我而言,我遇到了与上述相同的错误。我有一个“MY_ACTIONS”表,其中包含我希望添加到下拉列表中的ID和名称对。这是模型:namespaceTestSite.Models{publicclassMY_ACTIONS{//[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2214:DoNotCallOverridableMethodsInConstructors")]publicMY_ACTIONS(){this.o_actions=newHashSet();}[Key]publicintaction_id{get;放;}[StringLength(100)]publicstringaction_name{get;放;}[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2227:CollectionPropertiesShouldBeReadOnly")]publicvirtualICollectiono_actions{get;放;}}}为了让操作显示在下拉列表中,它在我的主表中名为LASTACTION的int字段中设置了一个ID。在那个模型中,我声明了ForeignKey关系:放;}publicintLASTACTION{得到;放;}//这将携带一个与action_id[ForeignKey("LASTACTION")]匹配的数字publicvirtualMY_ACTIONSMY_ACTIONS{get;放;在我的视图中加载此下拉列表时出现错误列名称“MY_ACTIONS_action_id”无效错误:@Html.DropDownList("lastaction",null,htmlAttributes:new{@class="form-control"})...我用这个Controller函数中的ViewBag:Model1db=newModel1();//数据库上下文MAIN_TABLEo_main=newMAIN_TABLE();o_main.lastaction=2;ViewBag.lastaction=newSelectList(db.MY_ACTIONS,"action_id","action_name",o_main.lastaction);如果我没有声明我的FK关系:[ForeignKey("LASTACTION")]publicvirtualMY_ACTIONSMY_ACTIONS{get;放;我可能有同样的问题。拥有虚拟实例的表示需要将其与某些物理属性相关联。这将是这样的:公共虚拟环境环境{get;放;}应该是:[ForeignKey("EnvironmentId")]publicvirtualEnvironmentEnvironment{get;放;}在上题的ProfileVersion类中,假设EnvironmentId名为Environment表中的主键(上面没有展示模型)。但是对我来说,我已经有了这个但我仍然得到错误,所以这样做仍然可能无法解决所有问题。事实证明,我所要做的就是去掉MY_ACTIONS模型中的ICollectiono_actions和this.o_actions=newHashSet();一切都很好。上面的问题中有很多这样的列表和ICollections,所以我敢打赌也有问题。从仅表示字段的普通模型开始,然后添加表示与外键链接的表的虚拟对象。然后确保您的下拉列表加载。只有在那之后,您才应该开始添加您的ICollections、HashSet、Lists和其他实际上不是实际数据库一部分的工具——HashSetsentity框架可能认为它需要对它们做一些它没有做的事情。我需要这样做。以上就是C#学习教程的全部内容:ASP.NETMVC/entityframework错误-无效的列名'Environment_Id',如果对大家有用,需要详细了解C#学习教程,希望大家点赞更多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
