C#一对多关系无法访问其他模型的属性

问题描述 投票:0回答:1

我是 c# 的新手,我正在研究一个访问 mysql 数据库并有两个模型的实体框架项目:User 和 Company。

问题是,当建立连接时,数据库连接一切正常,模型获取所有用户信息,甚至 companyId,但其他公司属性(例如 companyName 返回为 null,accountType 返回为 0.

我不知道问题出在哪里。 用户看起来像这样:

public partial class user
    {
        public user()
        {
            this.company = new company();
            
        }


public System.Guid userId { get; set; }
public System.Guid companyId { get; set; } //this is my fk
public string username { get; set; }

public virtual company company { get; set; }
public string companyName => company?.Name;
public int AccountType => company?.AccountType ?? 5;

}

我的公司班级是这样的:

public partial class company
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public organization()
    {
        this.users = new HashSet<user>();
    }
    public System.Guid companyId { get; set;}



     public string Name { get; set; }
        public string Address { get; set; }
        public int AccountType { get; set; }
System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<user> users { get; set; }
}

我的onModel创建方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<user>()
                .HasRequired(u => u.company)
                .WithMany(c => c.users)
                .HasForeignKey(u => u.companyId);
        }



    
c# asp.net-mvc entity-framework entity-relationship
1个回答
0
投票

EF默认不会加载关系,你需要使用其中一种方法加载相关数据。我个人通常更喜欢eager loading,例如:

var user = dbContext.Users
   .Include(u => u.company)
   .FirstOrDefault(u => u.userId == someId);

您还可以配置自动包含

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // ...

    modelBuilder.Entity<user>().Navigation(e => e.company).AutoInclude();
}

附言

考虑遵循推荐的 C# 编码约定(例如使用 PascalCasing 的类和属性名称,即

user
->
User

© www.soinside.com 2019 - 2024. All rights reserved.