C#学习教程:AspNetUsersID作为单独表中的外键,一对一关系共享,能够将AspNetUser表的外键存储在单独的Customer表中。我仍然是ASP.NET和实体框架的新手,但我已经阅读了很多帖子和文档。目前这是我的模型publicclassCustomer{[Display(Name="CustomerID")]publicintCustomerID{get;放;}publicstringUserId{得到;放;}[ForeignKey("UserId")]public}}publicclassApplicationUser:IdentityUser{publicvirtualCustomerCustomer{get;放;}}publicclassApplicationDbContext:IdentityDbContext{publicDbSetCustomers{get;放;}publicApplicationDbContext():base("DefaultConnection"){}}我正在引用此错误无法确定类型“TestApplication.Models.Customer”和“TestApplication.Models.ApplicationUser”之间关联的主要端。此关联的主要端必须使用关系FluentAPI或数据注释进行显式配置。我也尝试了这个人的方法:这个关联的主要端必须使用关系流畅的API或数据注释显式配置所以我注释掉了ForeignKey注释并使用了那个人的建议,使用“modelBuilder”方法。当我更新我的数据库时,AspNetUsers表中的“Id”在Customers表中(这很好),但是作为ForeignKey的CustomerID也在AspNetUsers表中,这不是我想要的。我想要的是AspNetUsers的“Id”作为Customers表中的ForeignKey。在一对一关系中,“子”表(在您的情况下为Customer)应与相关表具有相同的主键,即外键。您提供的代码示例意味着,在Customer中,您将拥有一个名为CustomerID的PK,它与UserId不同。这适用于您的情况(未经测试):publicclassCustomer{[Key]publicstringUserId{get;放;}[ForeignKey("UserId")]publicvirtualApplicationUserApplicationUser{get;放;}}publicclassApplicationUser:IdentityUser{publicvirtualCustomerCustomer{get;放;编辑:ForeignKeyAttribute的MSDN声明:如果将ForeignKey属性添加到外键属性,则应指定关联导航属性的名称。如果将ForeigKey属性添加到导航属性,它应该指定关联的外键的名称。我将其解释为应该可以将ForeignKey属性添加到导航属性或外键属性,并且它应该以任何一种方式工作,但显然它不能。如下移动它应该可以解决问题。publicclassCustomer{[Key,ForeignKey("ApplicationUser")]publicstringUserId{get;放;}publicvirtualApplicationUserApplicationUser{get;放;}}publicclassApplicationUser:IdentityUser{publicvirtualCustomerCustomer{get;放;我知道这篇文章已有2年历史,但更好的解决方案是使用FluentAPI设置外键(而不是使用Customer类中的[ForeignKey]属性。方法如下:publicclassCustomer{publicintCustomerID{get;放;}publicvirtualApplicationUserApplicationUser{get;放;}}publicclassApplicationUser:IdentityUser{publicvirtualCustomerCustomer{get;放;}}publicclassApplicationDbContext:IdentityDbContext{publicApplicationDbContext():base("DefaultConnection"){}publicDbSetCustomers{get;放;}protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){base.OnModelCreating(modelBuilder);//ApplicationUser和Customer之间的一对零或一对一关系//Customers表中的UserId列将是外键modelBuilder.Entity().HasOptional(m=>m.Customer).WithRequired(m=>m.ApplicationUser).Map(p=>p.MapKey("UserId"));这将在Customers表中创建一个UserId列,它是AspNetUsers表的外键。您可以省略.Map(p=>p.MayKey("UserId"))并且EF将按照约定命名外键ApplicationUser_Id。以上是C#学习教程:AspNetUsers的ID在单独的表中作为外键,一对一关系的全部内容共享。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
