c# - ASP.NET Core Web 应用程序:创建具有默认用户模型作为属性的模型类
问题描述
我使用“ASP.NET Core 3.0 Web 应用程序(模型视图控制器)”模板创建了一个新项目。它带有身份验证(注册、登录、注销等)。
我现在想创建一个名为 InsurancePolicy 的模型类,它具有 User 属性(或 UserId 属性),显然在我的 localdb 的默认 AspNetUsers 表中引用了一个用户。
所以 EFCore 是我理解的建模代码优先,所以我创建了 InsurancePolicy 模型类,具有描述等所有属性。我遵循 Microsoft 的此指南。
但是我在 localdb 中没有 AspNetUsers 表的模型类,以便我在保险单上创建一个属性,例如public AspNetUsers User {get; set;}
我该怎么做呢?还是有更好的方法来做到这一点?
我是 Core 的新手,所以代码优先设计而不是 db first 对我来说仍然是模糊的。
更新
看起来 AspNetUsers 表的模型是 IdentityUser。这是真的,还是我仍然迷路?
解决方案
例如,我将添加模型Book
并为身份用户添加外键,一本书属于一个用户:
创建
Book.cs
:public class Book { public int Id { get; set; } public string Name { get; set; } public string UserId { get; set; } public IdentityUser User { get; set; } }
修改
ApplicationDbContext
以包含 DbSet:public class ApplicationDbContext : IdentityDbContext { public DbSet<Book> Books { get; set; } public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } }
add-migration Name
并update-database
在数据库中创建表和关系。如果要在控制器中添加属于当前用户的书,可以首先注入服务:
private readonly ILogger<HomeController> _logger; private readonly ApplicationDbContext _context; private readonly UserManager<IdentityUser> _userManager; public HomeController(ILogger<HomeController> logger, ApplicationDbContext context, UserManager<IdentityUser> userManager) { _logger = logger; _context = context; _userManager = userManager; }
创建书并保存到数据库:
Book book = new Book(); //or search user by FindByIdAsync or FindByEmailAsync var user = await _userManager.GetUserAsync(HttpContext.User); book.User = user; _context.Books.Add(book); await _context.SaveChangesAsync();
如果您想阅读具有用户属性的书籍,可以尝试:
using Microsoft.EntityFrameworkCore; var result= _context.Books.Include(rt => rt.User).Where(x => x.Id == 1).FirstOrDefault();
推荐阅读
- android - Espresso Android 测试 - 检查 IntroductoryOverlay 是否处于活动状态
- php - Composer 安装 Symfont PHP 版本错误
- java - 春季启动请求验证不起作用
- laravel - 使用路由助手时如何将数据添加到参数,所需的数据存储在变量中
- macos - 如何在 MAC 上从 1.2 升级 glsl 版本
- java - 从java中嵌入的JSON字符串中提取值
- opengl - opengl 和 GLFW3 简单的三角形绘制,看不到三角形
- mysql - mariaDB 10.1.44-MariaDB-0+deb9u1:如何更改空白根密码?
- python - Pandas 将函数应用于数据帧的每一行,以每个条目返回一个或多个新行
- wordpress - Wordpress 从另一个插件中删除或覆盖操作“template_redirect”