实体框架CodeFirst-定义此EntityType的密钥您好,我打算在我的一个项目中测试EFCodeFirst。这就是我要的。我有以下结构的三个表publicpartialclassApp_user{publicintid{get;放;}公共字符串名称{get;放;}publicstringemail_address{get;放;}公共字符串密码{get;放;}publicint}publicListRoles{get;放;}}publicpartialclassRole{publicintid{get;放;}公共字符串名称{get;放;}}publicpartialclassUser_role{publicintuser_id{get;放;}publicintrole_id{得到;放;}publicvirtualRoleRole{get;放;}publicvirtualApp_userApp_user{get;放;第三张表没有主键。所以它在运行时出错。这是错误消息-System.Data.Edm.EdmEntityType::EntityType'User_role'没有定义键。定义此EntityType的键。System.Data.Edm.EdmEntitySet:EntityType:EntitySetUser_roles基于类型User_role,未定义键。为什么?有解决办法吗?如果您认为您正在尝试模拟用户和角色之间的多对多关系。在这种情况下,您的模型是完全错误的。改用这个:publicpartialclassApp_user{publicintid{get;放;}公共字符串名称{get;放;}publicstringemail_address{get;放;}公共字符串密码{get;放;}publicintuser_type{}publicvirtualICollectionRoles{get;放;}}publicpartialclassRole{publicintid{get;放;}公共字符串名称{get;放;}公共虚拟ICollection用户{得到;放;}}这会自动创建多对多,你不需要为连接表操心。如果需要公开联结表,必须使用:publicpartialclassApp_user{publicintid{get;放;}公共字符串名称{get;放;}publicstringemail_address{get;放;}公共字符串密码{get;放;}publicintuser_type{得到;放;}publicvirtualICollectionUserRoles{get;放;}}publicpartialclassRole{publicintid{get;放;}公共字符串名称{get;放;}publicvirtualICollectionUserRoles{get;放;}}publicpartialclassUser_role{[Key,ForeignKey("App_user"),Column(Order=0)]publicintuser_id{get;放;}[Key,ForeignKey("Role"),Column(Order=1)]publicintrole_id{get;放;}publicvirtualRoleRole{get;放;}publicvirtualApp_userApp_user{get;对于您的错误-实体框架中的每个实体都必须定义一个主键。你可以这样做:publicpartialclassUser_role{[Key]publicintuser_id{get;放;}[Key]publicintrole_id{get;放;}publicvirtualRoleRole{get;放;}publicvirtualApp_userApp_user{get;set;由于我使用的是带有自动生成代码的ADO.net完整数据模型,我不想更改模型类,因此我更改了WebApiConfig.cs以定义基础模型的键:ODataConventionModelBuilderbuilder=newODataConventionModelBuilder();EntitySetConfigurationEntitySetConfiguration_Registration=builder.EntitySet("Registration");EntitySetConfigurationEntitySetConfiguration_Lead=builder.EntitySet("Lead");EntitySetConfigurationEntitySetConfiguration_Session=builder.EntitySet("Session");EntitySetConfiguration_Lead.EntityType.HasKey(p=>p.Lead_Id);EntitySetConfiguration_Session.EntityType.HasKey(p=>p.Session_Id);config.Routes.MapODataRoute("odata","odata",builder.GetEdmModel());确保您正在使用(使用System.ComponentModel.DataAnnotations;)只是在模型的只需在数据字段的顶部添加关键字[Key]。以上就是C#学习教程:实体框架代码先行——定义这个EntityType的key共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关照——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
