使用Entity Core创建一个简单的restful Web API.我遇到的问题是,当使用简单的context.Users.ToListAsync()查询时,我收到数据库中所有用户的列表,但是,当加载一对一关系导航属性时(context.Users.Include( u => u.Status).ToListAsync(),我总是只收到我数据库中的第一项.
以下是我的Code First型号:
public class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string FullName { get { return LastName + "," + FirstName; } } public string Email { get; set; } public string Avatar { get; set; } public string GUID { get; set; } public string InternalId { get; set; } // Foreign keys and navigation properties public virtual UserStatus Status { get; set; } } public class UserStatus { public int Id { get; set; } public string Name { get; set; } // Foreign keys and navigation properties public virtual List<User> Users { get; set; } }
每个用户必须具有用户状态.用户状态应该是可能状态状态的表.将有许多用户具有单一状态类型.这是我流利的映射:
protected override void OnModelCreating(ModelBuilder modelBuilder) { // Users modelBuilder.Entity<User>() .HasAlternateKey(p => p.GUID); modelBuilder.Entity<User>() .HasAlternateKey(p => p.InternalId); modelBuilder.Entity<User>() .HasAlternateKey(p => p.Email); modelBuilder.Entity<User>() .Property(p => p.FirstName) .HasMaxLength(40) .Isrequired(); modelBuilder.Entity<User>() .Property(p => p.LastName) .HasMaxLength(40) .Isrequired(); modelBuilder.Entity<User>() .Property(p => p.Email) .HasMaxLength(250) .Isrequired(); modelBuilder.Entity<User>() .HasOne(p => p.Status) .WithMany(s => s.Users) .HasForeignKey("StatusId") .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict); // User Status modelBuilder.Entity<UserStatus>() .Property(s => s.Name) .HasMaxLength(40) .Isrequired(); }
这是我正在测试的简单数据初始化:
List<UserStatus> status = new List<UserStatus>(); status.Add(new UserStatus { Name = "Invited" }); status.Add(new UserStatus { Name = "Registered" }); status.Add(new UserStatus { Name = "Verified" }); status.Add(new UserStatus { Name = "Deactivated" }); foreach (UserStatus s in status) { context.UserStatus.Add(s); } context.SaveChanges(); List<User> users = new List<Users>(); users.Add(new User { FirstName = "Jack",LastName = "Test",Email = "[email protected]",GUID = "TEST001",InternalId = "00001",Status = status[0] }); users.Add(new User { FirstName = "Jane",LastName = "Tester",Email = "[email protected]",GUID = "TEST002",InternalId = "00002",Status = status[1] }); foreach (User u in users) { context.Users.Add(u); } context.SaveChanges();
在我的web API控件中,纯粹用于测试,我正在执行以下操作:
[HttpGet] public async Task<IActionResult> Get() { var users = await context.Users .ToListAsync(); return new OkObjectResult(users); }
[HttpGet] public async Task<IActionResult> Get() { var users = await context.Users .Include(u => u.Status) .ToListAsync(); return new OkObjectResult(users); }
[HttpGet] public async Task<IActionResult> Get() { var users = await context.Users .Include(u => u.Status) .LastAsync(); return new OkObjectResult(users); }
而不是第一个条目,我得到了最后一个,这意味着我可以使用整个列表,至少直到ToListAsync调用.
有人能告诉我我做错了什么吗?一对一关系是否设置错误? ym数据初始化?我无法想出这个.
非常感谢你的时间!
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。