0

假设您想在用户表中创建一个父子关系,其类型为 0 到 1,我们希望以同样的方式进一步添加性别。

public class Gender
{
    [Key]
    public virtual int GenderID { get; set; }

    public virtual string GenderName { get; set; }

    public virtual ICollection<UserProfile> UserProfiles { get; set; }
}

和用户资料

public class UserProfile
{

    [Key]
    public virtual int UserId { get; set; }

    public virtual UserProfile UserParent { get; set; }

    public virtual int? ParentUserId { get; set; }

    public virtual String UserName { get; set; }

    public virtual Gender Gender { get; set; }

    public virtual int? GenderID { get; set; }

  }

为了清楚起见

       modelBuilder.Entity<UserProfile>()
            .HasOptional(c => c.UserParent);

        // User -> Gender
        modelBuilder.Entity<UserProfile>()
            .HasOptional(g => g.Gender);

在此处输入图像描述

一切看起来都不错,但目前我无法检索从父用户名获得的数据。

   public IQueryable<UserProfileListViewModel> UserAllVM
    {
        get
        {
            var uservm = context.UserProfiles
                .Select(l => new UserProfileListViewModel
                { 
                    UserId = l.UserId,
                    UserName = l.UserName,
                    ParentUserId = l.ParentUserId ?? 0,
                    //ParentUserName = this.context.UserProfiles.Where(e => e.UserId == l.ParentUserId).FirstOrDefault().UserName ?? "",
                    ParentUserName = l.UserParent.UserName, **// this way make always null**
                    GenderID = l.GenderID ?? 0,
                    GenderName = l.Gender.GenderName ?? "",
                });

            return uservm;
        }
    }

注释掉现在获取父用户名的方式。问题是为什么我无法检索 Parent UserName - 我想念某事?

Tx 寻求帮助

4

1 回答 1

2

您的模型配置不完整,请参阅此问题的答案

您可以在其中一个或(与/相同)上使用[ForeignKey]属性(MSDNUserProfile.UserParentUserProfile.ParentUserIdUserProfile.GenderUserProfile.GenderId

或者您可以通过 Fluent API 定义关系:

modelBuilder.Entity<UserProfile>()
  .HasOptional(u => u.UserParent)
  .WithMany()
  .AsForeignKey(u => u.ParentUserId)

// User -> Gender
modelBuilder.Entity<UserProfile>()
  .HasOptional(u => u.Gender)
  .WithMany(g => g.UserProfiles)
  .AsForeignKey(u => u.GenderID);
于 2012-10-26T14:37:18.900 回答