C# 在实体框架核心中建立关系

C# 在实体框架核心中建立关系,c#,entity-framework-core,ef-fluent-api,C#,Entity Framework Core,Ef Fluent Api,我正在尝试使用Fluent API在实体框架核心中建立一对多关系,但没有成功 我有两个对象,称为Message和Source,它们被定义为 public class Message { public int ID { get; set; } public int FromUserID { get; set; } public int ToUserID { get; set; } public int SourceID { get; set; } publi

我正在尝试使用Fluent API在实体框架核心中建立一对多关系,但没有成功

我有两个对象,称为Message和Source,它们被定义为

public class Message
{
    public int ID { get; set; }
    public int FromUserID { get; set; }
    public int ToUserID { get; set; }
    public int SourceID { get; set; }
    public int Priority { get; set; }
    public string Subject { get; set; }
    public string MessageBody { get; set; }
    public DateTime DateTimeCreated { get; set; }
    public DateTime? DateTimeDelivered { get; set; }
    public Source Source { get; set; }
}

public class Source
{
    public int ID { get; set; }
    public string Name { get; set; }
    public ICollection<Message> Messages { get; set; }
}
我的问题是我得到了返回的消息OK的数据,但是对于source我只得到了null

我看了不同的教程和软件问题,但我看不出哪里出了问题


希望有人能对此有所启发。

有几种方法可以加载相关数据:

快速加载:

表示相关数据作为初始查询的一部分从数据库加载

显式加载:

意味着相关数据将在以后从数据库显式加载

延迟加载:

表示在访问导航属性时,相关数据从数据库透明加载

有关更多信息,请参阅

如果我们采用延迟加载方法,您可以使用UseLazyLoadingProxies()设置选项:

…然后将导航属性设置为虚拟:

public virtual Source Source { get; set; }

公共虚拟ICollection消息{get;set;}

加载相关数据有几种方法:

快速加载:

表示相关数据作为初始查询的一部分从数据库加载

显式加载:

意味着相关数据将在以后从数据库显式加载

延迟加载:

表示在访问导航属性时,相关数据从数据库透明加载

有关更多信息,请参阅

如果我们采用延迟加载方法,您可以使用UseLazyLoadingProxies()设置选项:

…然后将导航属性设置为虚拟:

public virtual Source Source { get; set; }

公共虚拟ICollection消息{get;set;}
Include(msg=>msg.Source)
添加到查询中,它将强制加载该查询 带着信息

var get=context.Messages.Include(msg=>msg.Source).Where(m=>m.ID==1.FirstOrDefault();

Include(msg=>msg.Source)
添加到查询中,它将强制加载该查询 带着信息

var get=context.Messages.Include(msg=>msg.Source).Where(m=>m.ID==1.FirstOrDefault();

我无法看到UseLazyLoadingProxies()。我是否缺少依赖项?@RichardBoyce所有这些都在文档链接(包括代理程序包)中解释,我无法看到UseLazyLoadingProxies()。我是否缺少依赖项?@RichardBoyce所有这些都在文档链接(包括代理包)中解释
var get = context.Messages.Where(m => m.ID == 1).FirstOrDefault();
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
    .UseLazyLoadingProxies()
    .UseSqlServer(myConnectionString);
public virtual Source Source { get; set; }
public virtual ICollection<Message> Messages { get; set; }