asp.net-core - 获取应用程序用户创建的属于宠物的数据
问题描述
我在用户和宠物之间有一对多的关系。我希望人们能够看到创建宠物的应用程序用户的数据,并将其放在宠物的详细视图中以供采用。我还想检索用户在 Account/Manage/Index 文件中创建的所有宠物。
不同宠物的型号
public ApplicationUser ApplicationUser { get; set; }
public int ApplicationUserId { get; set; }
应用用户模型
public List<Reptile> Reptiles { get; set; }
public List<Dog> Dogs { get; set; }
public List<Cat> Cats { get; set; }
应用程序数据库上下文
public DbSet<Reptile> Reptiles { get; set; }
public DbSet<Cat> Cats { get; set; }
public DbSet<Dog> Dogs { get; set; }
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<ApplicationUser>()
.HasMany(r => r.Reptiles)
.WithOne(u => u.ApplicationUser)
.IsRequired();
builder.Entity<ApplicationUser>()
.HasMany(r => r.Dogs)
.WithOne(u => u.ApplicationUser)
.IsRequired();
builder.Entity<ApplicationUser>()
.HasMany(r => r.Cats)
.WithOne(u => u.ApplicationUser)
.IsRequired();
base.OnModelCreating(builder);
}
这就是我目前获取用户的方式,我知道这是错误的方式。
var applicationUserId = _userManager.GetUserId(HttpContext.User);
reptile.ApplicationUserId = Convert.ToInt32(applicationUserId);
我只能获取登录数据的当前用户。不是实际创建宠物的用户。
爬行动物模型
public class Reptile
{
public int ReptileId { get; set; }
public string Name { get; set; }
public string Age { get; set; }
[Display(Name ="Reptile's Image")]
public byte[] Image { get; set; }
[Display(Name ="Food Requirements")]
public string FoodReq { get; set; }
[Display(Name="Habitat Requiremtns")]
public string HabitatReq { get; set; }
public string Gender { get; set; }
public string Type { get; set; }
public string Size { get; set; }
public string Color { get; set; }
[Display(Name="Recent Checkup")]
public bool RecentCheckup { get; set; }
public bool Trained { get; set; }
public bool Neutered { get; set; }
public bool Declawed { get; set; }
[Display(Name = "Good With Other Reptiles")]
public bool GoodWithRept { get; set; }
[Display(Name = "Good With Kids")]
public bool GoodWithKids { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public int ApplicationUserId { get; set; }
}
详细信息页面(目前仅尝试显示用户的名字,直到我可以成功显示我需要的数据)
@model PetAdopt.Models.Reptile
@{
ViewData["Title"] = "Details";
}
<h1>Details</h1>
<div>
<h4>Reptile</h4>
<hr />
<dl class="row">
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.ApplicationUser.FirstName)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.ApplicationUser.FirstName)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Name)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Age)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Age)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Image)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Image)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.FoodReq)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.FoodReq)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.HabitatReq)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.HabitatReq)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Gender)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Gender)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Type)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Type)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Size)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Size)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Color)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Color)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.RecentCheckup)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.RecentCheckup)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Trained)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Trained)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Neutered)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Neutered)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Declawed)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Declawed)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.GoodWithKids)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.GoodWithKids)
</dd>
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.GoodWithRept)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.GoodWithRept)
</dd>
</dl>
</div>
<div>
<a asp-action="Edit" asp-route-id="@Model.ReptileId">Edit</a> |
<a asp-action="Index">Back to List</a>
</div>
解决方案
看来您的问题是如何获取相关的实体数据。您可以使用.Include
方法例如:
var user = _context.Reptiles.Include(r => r.ApplicationUser).FirstOrDefault(r => r.reptileId == 1);
并且可以参考文档:
https://docs.microsoft.com/en-us/ef/core/querying/related-data
推荐阅读
- python - 改变函数参数的类型提示装饰器
- python - 当我尝试将 JSON 文件读取为 Pandas 时出错
- c - 为什么我不能检查我是否在 tdm-gcc 编译器中包含了 stdlib.h?
- python - PySide2:窗口没有响应
- ajax - 不捕获 ajax 中的类
- laravel - nginx:配置文件 /etc/nginx/nginx.conf 在 Laravel 项目中测试失败
- visual-studio-code - VSCode“快速打开”菜单更改“最近使用”排序过于急切
- java - 如何使用 Springboot 注入模拟?
- angular - Angular(输入)指令在 iOS 中不起作用
- firebase - Flutter:尝试使用新的 Firebase 依赖项运行应用程序时出错