如何使用 Fluent API 配置从 AspNetUsers 表到...的一对多关系

Posted

技术标签:

【中文标题】如何使用 Fluent API 配置从 AspNetUsers 表到...的一对多关系【英文标题】:How Configure one to Many Relationship From AspNetUsers Table To ... using Fluent API 【发布时间】:2021-10-24 02:59:21 【问题描述】:

​ 嗨

我有两张桌子

1.应用用户

2.销售

如何使用 Fluent API 在 DataContext.cs 类中配置一对多关系

从 AppUser 表 ID 到销售表用户 ID

继承自 IdentityUser 的 AppUser 表类

using System.Collections.Generic;
using Microsoft.AspNetCore.Identity;

namespace Domain

    public class AppUser : IdentityUser
    
        public string DisplayName  get; set; 
        public string Bio  get; set; 
       
    

销售表类

namespace Domain

    public class Sale
    
        public int SaleID  get; set; 
        public int SaleAmount  get; set; 
        public int UserID  get; set; 

    

谢谢。

【问题讨论】:

【参考方案1】:

添加关系

public class AppUser : IdentityUser
    
        public string DisplayName  get; set; 
        public string Bio  get; set; 

         public virtual  ICollection<Sale> Sales  get; set; 
    


    public class Sale
    
        public int SaleID  get; set; 
        public int SaleAmount  get; set; 

        public int UserID  get; set; 
        public virtual AppUser User  get; set; 

    

由于您使用的是 net core 5,在这种情况下您不需要任何流畅的 api

但如果你使用其他版本,你可以添加

modelBuilder.Entity<Sale>(entity =>
            
                entity.HasOne(d => d.User)
                   .WithMany(p => p.Sales )
                   .HasForeignKey(d => d.UserId);
            );

【讨论】:

我同意您的解决方案,但我建议您不要这样做。首先,SaleAppUser 经常位于不同的 DbContexts 中(尤其是如果 Identity 由 Visual Studio 或 dotnet 构建时)。身份甚至可能不在数据库中或在同一个数据库中;所以甚至可能无法设置一对多的关系。您应该使用身份 API,而不是表关系。最后,很大程度上取决于应用程序是否总是保存当前用户的 ID(“自助服务”)或者它可能是不同的用户(“客户服务”)。简而言之,不要这样做

以上是关于如何使用 Fluent API 配置从 AspNetUsers 表到...的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

Code First约定-Fluent API配置

Code First约定-Fluent API配置

Entity Framework Code First Fluent API - 配置关系

如何使用 Entity Framework Code First Fluent API 指定表名

译第24节---Fluent API - 属性映射

如何使用 Fluent API 映射这种冗余的父子关系