gpt4 book ai didi

c# - AspNetUsers' ID 作为单独表中的外键,一对一关系

转载 作者:可可西里 更新时间:2023-11-01 03:08:23 25 4
gpt4 key购买 nike

我上下查看,尝试了所有能够将 AspNetUser 表的外键存储在单独的 Customer 表中的各种不同方法。我在 ASP.NET 和 Entity Framework 方面还是个新手,但我已经阅读了很多文章和文档。

目前我有这个

模型

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”作为外键出现在 Customers 表中。

最佳答案

在一对一关系中,“子”表,在您的情况下 Customer , 应与相关表具有相同的主键,即外键。

您提供的代码示例意味着,在 Customer你将有一个名为 CustomerID 的 PK这不同于 UserId .

这应该适用于您的情况(未经测试):

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 作为单独表中的外键,一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com