繁体   English   中英

html 表中的实体框架多对多关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM