C# 通过EF6和Linq从相关表检索数据

C# 通过EF6和Linq从相关表检索数据,c#,sql,linq,entity-framework,entity-framework-6,C#,Sql,Linq,Entity Framework,Entity Framework 6,我已经使用代码优先流程创建了几个SQL表 public class Person { [Key] public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public TitleType Title { get; set; } } public class TitleType { public int Id { get; set; } public

我已经使用代码优先流程创建了几个SQL表

public class Person
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public TitleType Title { get; set; }
}
public class TitleType
{
public int Id { get; set; }
public string Name { get; set; }
}
在我的代码中,我使用以下语法检索一个人

Person person= db.Persons.Find(id);
我可以正确访问person的属性,但我不应该使用访问TitleType Name属性吗

var MyTitle = person.Title.Name;
我的代码优先代码结构是否正确,或者我是否需要更改某些关系? 目前它只返回空值


这是我的上下文类

 public partial class MyContext : DbContext
{
    static MyContext()
    {
        Database.SetInitializer<MyContext>(null);
    }
    public MyContext()
        : base("Name=MyContext")
    {
    }
   public DbSet<Person> Persons{ get; set; }
   public DbSet<TitleType> TitleTypes { get; set; }

           protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    }               
}
公共部分类MyContext:DbContext { 静态MyContext() { Database.SetInitializer(null); } 公共MyContext() :base(“Name=MyContext”) { } 公共DbSet Persons{get;set;} 公共数据库集标题类型{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { } }
看起来您禁用了延迟加载。尝试以下内容以急切地加载
Title
属性内容:

Person person= db.Persons.Include("Title").FirstOrDefault(x => x.Id == id);

您在运行时是否有任何异常?您是否也可以发布您的上下文类?在运行tme时没有异常。只是添加了上下文类代码。我以为我启用了延迟加载。。您的更改成功了,但现在我需要让延迟加载工作。@JohnS上下文仍然打开时,您是否尝试访问
Title
属性?当请求导航属性时,它已经关闭是一个很常见的问题,因此无法对db进行查询。顺便说一句,为什么需要延迟加载?由于您只有一个数据库查询发送到数据库,所以加载内容的效果会更好。对于这个应用程序来说,性能并不是什么大问题。我更关心的是代码的简化,我认为我可以通过这种方式来实现。要使延迟加载工作,请将virtual放在cross table变量的类型前面。即公共虚拟标题类型标题