[英]Entity Framework many-to-many relationship in a html table
我正在 .net 核心 3.1 中创建一个 ASP.NET 项目,该项目包含 2 个表(用户和地址),通过第三个表(用户地址)具有 NxN 关系
public class User
{
public Guid ID { get; set; }
[Required]
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
public string Description { get; set; }
public List<UserAddress> Addresses { get; set; }
}
public class Address
{
public Guid ID { get; set; }
[Required]
public string Information { get; set; }
public bool IsCommercial { get; set; }
public List<UserAddress> Users { get; set; }
}
public class UserAddress
{
public Guid UserID { get; set; }
public Guid AddressID { get; set; }
public User User { get; set; }
public Address Address { get; set; }
}
public class ManagerContext : DbContext
{
public ManagerContext(DbContextOptions<ManagerContext> options) : base(options)
{
}
public DbSet<User> User { get; set; }
public DbSet<Address> Address { get; set; }
public DbSet<UserAddress> UserAddress { get; set; }
public DbSet<Department> Department { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasIndex(e => new { e.Name })
.IsUnique(true);
modelBuilder.Entity<Address>()
.HasIndex(e => new { e.Information })
.IsUnique(true);
modelBuilder.Entity<UserAddress>()
.HasKey(e => new { e.UserID, e.AddressID });
modelBuilder.Entity<Department>()
.HasIndex(e => new { e.Name })
.IsUnique(true);
}
}
我想创建一个 HTML 页面,该页面显示特定用户的详细信息以及与该用户相关的地址列表
<div> <h4>User</h4> <hr /> <dl class="row"> <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.Email) </dt> <dd class="col-sm-10"> @Html.DisplayFor(model => model.Email) </dd> <dt class="col-sm-2"> @Html.DisplayNameFor(model => model.Description) </dt> <dd class="col-sm-10"> @Html.DisplayFor(model => model.Description) </dd> </dl> <table class="table table-striped"> <thead> <tr> <th scope="col">#</th> <th scope="col">@Html.DisplayNameFor(model => model.Addresses[0].Address.Information)</th> <th scope="col">@Html.DisplayNameFor(model => model.Addresses[0].Address.IsCommercial)</th> </tr> </thead> <tbody> @for (int i = 0; i < Model.Addresses.Count; i++) { <tr> <th scope="col">@i</th> <td>@Html.DisplayFor(model => model.Addresses[i].Address.Information)</td> <td>@Html.DisplayFor(model => model.Addresses[i].Address.IsCommercial)</td> </tr> } </tbody> </table> </div>
但是,由于某种原因,User.Addresses 列表为 null 并返回错误,因为代码尝试获取 null object 的 Count 属性。 为什么该列表没有填充 UserAddress 列表? 我究竟做错了什么?
public class User { public Guid ID { get; set; } [Required] public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } public string Description { get; set; } public List<Address> Addresses { get; set; } } public class Address { public Guid ID { get; set; } [Required] public string Information { get; set; } public bool IsCommercial { get; set; } public List<User> Users { get; set; } } public class UserAddress { public Guid ID { get; set; } public Guid UserId { get; set; } public Guid AddressId { get; set; } public DateTime CreatedAt { get; set; } } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<User>().HasMany(user => user.Addresses).WithMany(address => address.Users).UsingEntity<UserAddress> (pt => pt.HasOne<Address>().WithMany(), pt => pt.HasOne<User>().WithMany()).Property(pt => pt.CreatedAt).HasColumnType("timestamp without time zone").HasDefaultValueSql("NOW()").ValueGeneratedOnAdd(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.