【发布时间】:2021-08-17 10:15:04
【问题描述】:
我的一个 DbSet 返回一个空列表,虽然数据存在于 db 中,并且在升级到 .NET 5.0 之前它曾经工作过
var list = await context.TeamMembers.ToListAsync(); >> returns empty list
var list = await context.TeamMembers.Include(t=>t.User).ToListAsync(); >> returns empty list
当其他人正常工作时返回填充列表
var list2 = await context.Users.ToListAsync(); >> works fine
我的数据库集是这样定义的
public DbSet<User> Users { get; set; }
public DbSet<TeamMember> TeamMembers { get; set; }
这是我的表结构
CREATE TABLE [dbo].[teamMembers] (
[Id] INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
[UserId] INT NOT NULL,
[PartnerId] INT NOT NULL,
[Type] INT NOT NULL,
[CreationDate] DATETIME DEFAULT (getdate()) NOT NULL,
[ModificationUserId] INT NOT NULL,
[ModificationDate] DATETIME DEFAULT (getdate()) NOT NULL,
CONSTRAINT [FK_teamMembers_Members] FOREIGN KEY ([UserId]) REFERENCES [users]([Id]),
CONSTRAINT [FK_teamMembers_Partners] FOREIGN KEY ([PartnerId]) REFERENCES [partners]([Id]),
CONSTRAINT [FK_teamMembers_ModificationUser] FOREIGN KEY ([ModificationUserId]) REFERENCES [users]([Id]),
);
这是我的对象
[Table("teamMembers")]
public class TeamMember
{
[Required]
public int? Id { get; set; }
[Required]
public User User { get; set; }
[Required]
public int? PartnerId { get; set; }
[Required]
public int Type { get; set; } // 0 agency 1 Salesman
[Required]
public DateTime CreationDate { get; set; }
[Required]
public DateTime ModificationDate { get; set; }
[Required]
public int ModificationUserId { get; set; }
}
[编辑] 这是EF生成的查询,如果我手动运行它会返回数据 (我使用 .Include(...) 时有一个关节)
SELECT [t].[Id], [t].[CreationDate], [t].[ModificationDate], [t].[ModificationUserId], [t].[PartnerId], [t].[Type], [t].[UserId], [u].[Id], [u].[Civility], [u].[CreationDate], [u].[CreationUserId], [u].[Email], [u].[FirstName], [u].[Identifier], [u].[Language], [u].[LastName], [u].[Login], [u].[LoginEnabled], [u].[Mobile], [u].[ModificationDate], [u].[ModificationUserId], [u].[MustResetPassword], [u].[Password], [u].[Phone], [u].[Position], [u].[ResetPasswordDate], [u].[ResetPasswordToken], [u].[RoleId], [u].[Type]
FROM [teamMembers] AS [t]
LEFT JOIN [users] AS [u] ON [t].[UserId] = [u].[Id]
这里是用户类
public class User
{
[Required]
public int? Id { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public string Email { get; set; }
public string Login { get; set; }
[Required]
public DateTime CreationDate { get; set; }
[Required]
public DateTime ModificationDate { get; set; }
[Required]
public int CreationUserId { get; set; }
[Required]
public int ModificationUserId { get; set; }
[Required]
public short RoleId { get; set; }
[Required]
public short Civility { get; set; }
public string Phone { get; set; }
public string Mobile { get; set; }
[Required]
public string Position { get; set; }
[Required]
public short Language { get; set; }
[Required]
public bool MustResetPassword { get; set; }
[Required]
public short Type { get; set; } // professional/private
public string Identifier { get; set; }
[JsonIgnore]
public string Password { get; set; }
[Column(TypeName = "BIT")]
public bool LoginEnabled { get; set; }
public string ResetPasswordToken { get; set; }
public DateTime? ResetPasswordDate { get; set; }
}
这里是伙伴类
public class Partner
{
[Required]
public int? Id { get; set; }
public Company Company { get; set; }
[Required]
public User Manager { get; set; }
public List<Invoice> Invoices { get; set; }
[NotMapped]
public double InvoicesAmount { get; set; }
[Required]
public List<ProductRetribution> ProductsRetributions { get; set; }
[Required]
public double Won { get; set; }
[Required]
public double Pending { get; set; }
[Required]
public double Offset { get; set; }
// following fields are created by the system, inputs from client are discarded, no validation , but needed for mvc
[Required]
public DateTime CreationDate { get; set; }
[Required]
public DateTime ModificationDate { get; set; }
[Required]
public int ModificationUserId { get; set; }
}
我有什么遗漏吗?
感谢您的帮助
【问题讨论】:
-
SELECT * FROM [dbo].[teamMembers]会给你结果吗?您可以检查 EF 针对您的数据库运行的原始 SQL 吗?您还有其他未在此处显示的实体配置吗? -
我在 db 中有数据,查询有效,并获取了其他实体......这曾经工作正常......我想到的唯一区别是我在 TeamMember 实体中有外键
-
好的,这是我问的第一个问题,但还有两个...
-
使用 sql profiler 我可以看到并重放 EF 创建的查询,它返回数据
-
我没有其他配置...我不太明白你的意思
标签: entity-framework asp.net-core dbset