Entity Framework无法返回关联实体:User中Person始终为Null
问题:EF无法生成关联查询,User对象的Person始终为Null
从数据库获取关联实体时,Entity Framework无法生成关联查询,User对象中的Person始终为Null。尝试过数据注解和Fluent API调整实体关系,问题仍未解决。
实体类代码
User类
public class User { public Guid Id { get; set; } public string Username { get; set; } public byte[] Password { get; set; } public byte[] Salt { get; set; } public UserRole Role { get; set; } public Person Person { get; set; } public User() { Id = Guid.NewGuid(); } }
Person类
public class Person { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int PersonalIdentificationNumber { get; set; } public string PhoneNumber { get; set; } public string Email { get; set; } public PersonImage PersonImage { get; set; } public Address Address { get; set; } public User User { get; set; } public Person() { Id = Guid.NewGuid(); } }
现有ModelBuilder配置
protected override void OnModelCreating(ModelBuilder modelBuilder) { var personEntityTypeBuilder = modelBuilder.Entity<Person>(); personEntityTypeBuilder .HasOne(person => person.User) .WithOne(user => user.Person) .HasForeignKey<Person>("UserId"); }
当前查询代码及问题表现
使用Include语句尝试关联查询,但未生效,生成的SQL完全没有关联Person表:
_db.Users.Include(u => u.Person).Single(i => i.Id == userId);
EF生成的SQL:
SELECT TOP(2) [u].[Id], [u].[Password], [u].[Role], [u].[Salt], [u].[Username] FROM [Users] AS [u] WHERE [u].[Id] = @__userId_0
解决方案
调整Fluent API配置,将Person的Id作为与User关联的外键:
modelBuilder.Entity<Person>() .HasOne(person => person.User) .WithOne(user => user.Person) .HasForeignKey<Person>(person => person.Id);
内容的提问来源于stack exchange,提问作者Smiley_Cat
相关产品推荐
相关产品推荐

