我已经查找起来,尝试所有不同的和各种各样的方式可以将AspNetUser表的外键存储在单独的Customer表中.我仍然是ASP.NET和实体框架的新功能,但我已经阅读了不少帖子和文档.

目前这是我所拥有的

楷模

public class Customer
{
    [display (Name="Customer ID")]
    public int CustomerID { get; set; }

    public string UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual ApplicationUser ApplicationUser { get; set; }

}


 public class ApplicationUser : IdentityUser
{
    public virtual Customer Customer { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<Customer> Customers { get; set; }

    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

}

我得到这个错误,引用

Unable to determine the principal end of an association between the types ‘TestApplication.Models.Customer’ and ‘TestApplication.Models.ApplicationUser’. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

我也尝试过这个人的方法:The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations

所以我评论了ForeignKey注释,并使用了这个人的建议,使用了“modelBuilder”的方法.当我更新了我的数据库时,AspNetUsers表中的“Id”位于Customers表中(这是很好的),但是作为ForeignKey的CustomerID也在AspNetUsers表中,这不是我想要的.

我想要的是,AspNetUsers的“Id”作为ForeignKey在Customers表中.

解决方法

在一对一的关系中,“孩子”表,在您的情况下,客户应该具有与相关表相同的主键,即外键.

您提供的代码示例意味着,在客户端,您将拥有一个不同于UserId的名为CustomerID的PK.

这应该在你的情况下工作(未测试):

public class Customer
{
    [Key]
    public string UserId { get; set; }

    [ForeignKey("UserId")]
    public virtual ApplicationUser ApplicationUser { get; set; }
}

public class ApplicationUser : IdentityUser
{
    public virtual Customer Customer { get; set; }
}

编辑:

MSDN for ForeignKeyAttribute状态:

If you add the ForeigKey attribute to a foreign key property,you
should specify the name of the associated navigation property. If you
add the ForeigKey attribute to a navigation property,you should
specify the name of the associated foreign key(s).

我解释这一点,因为应该可以将ForeignKey属性添加到导航属性或外键属性,并且任何一种方式都应该可以工作,但显然不是.按照下方移动它应该做的诀窍.

public class Customer
{
    [Key,ForeignKey("ApplicationUser")]
    public string UserId { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

public class ApplicationUser : IdentityUser
{
    public virtual Customer Customer { get; set; }
}

c# – AspNetUsers’ID作为外键分离表,一对一关系的更多相关文章

  1. android – greenDAO不会在表中生成FOREIGN KEY(…)约束

    当我创建如下所示的双向1:n关系时,生成器不会在表上使用任何FOREIGNKEY(…)约束.这是正常吗?是否应该在表中生成FOREIGNKEY(…)约束,还是仅在运行时通过代码强制执行?

  2. 使用spring jpa 如何给外键赋值

    这篇文章主要介绍了使用spring jpa 如何给外键赋值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. jpa使用注解生成表时无外键问题及解决

    这篇文章主要介绍了jpa使用注解生成表时无外键问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. Django中外键使用总结

    本文主要介绍了Django中外键使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. php – laravel errno 150外键约束形成错误

    有人可以帮我解决这个问题吗?有3个表有2个外键:运行迁移后出错:对于外键,引用和引用字段必须具有完全相同的数据类型.您可以在用户和公司中创建id字段作为有符号整数.但是,您将两个外键都创建为无符号整数,因此密钥的创建失败.您需要将unsigned子句添加到id字段定义,或者从外键字段中删除unsigned子句.

  6. 你不会使用外键的原因? [php MySQL]

    如果你想要一个例子,他们基本上有调查,一个调查有一系列的问题.一个问题是调查的一部分,因此它将其列为专栏.这几乎是它,但是它随处可见.我很感激任何洞察力:)原始开发人员可能选择使用MyISAM或任何其他不支持外键约束的存储引擎.

  7. 单元测试 – 在PHPUnit / DBUnit中设置外键约束

    我正在开发用于测试模型功能的单元测试.我使用PHPPDO与DBUnit1.1.2和PHPUnit3.6.10,我的数据集是一个yml文件.在数据库中加载灯具时,我需要关闭外键检查.之后,我需要再次打开它,以便我可以在这些约束下运行我的测试.以下是我广义Testcase文件中的代码片段,我将为我开发的任何新的测试用例添加代码.当我在这些设置下运行测试用例时,我发现$pdo->exec()不执行.我的做法有什么问题?有更好的选择吗?改变你的功能setUp这样

  8. php – SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败 – Laravel

    ))表用户表位置迁移用户迁移地点模型用户型号位置调节器我似乎无法找到我做错的事.显然外键有问题.用户行需要对有效位置的引用.在保存用户之前,该位置必须可用.因此,首先保存位置,然后保存用户并取消注释$user->location_id行,您就完成了.

  9. php – Laravel检查集合是否包含外键

    我想知道是否有一个函数或其他东西,你可以从集合中获得一个元素而不是主键…在laraveldoc上,只有一个示例通过使用contains()来检查主键.谁能帮我吗?检查是否存在id=2的投票的示例我想要检查是否有一个’user_id’=签名用户ID的投票

  10. php – 使用多个外键插入Laravel模型

    你现在遇到的问题是你懒得加载Auth::user的注释.我可以做的一件事是,在Eloquent模型中使用关联方法,请尝试这一点,看看它是否适合您的特定需求.

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部