C# 在实体框架核心中建立关系
我正在尝试使用Fluent API在实体框架核心中建立一对多关系,但没有成功 我有两个对象,称为Message和Source,它们被定义为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
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; }