gpt4 book ai didi

c# - EF 在其导航属性为 null 时不抓取对象

转载 作者:行者123 更新时间:2023-12-05 03:49:34 25 4
gpt4 key购买 nike

我的问题是 - 如果数据库中的导航属性为“空”,我的查询将不会返回我正在查询的主要对象。

为清楚起见,我的问题不是 .Include() 中的导航属性返回 null。我的问题是该属性预计为空,而当它为空时,不会返回市场。

这是我的意思的一个例子:

我的代码:

            markets = await _context.Markets
.Include(x => x.Agency)
.Include(x => x.Location)?.ThenInclude(x => x.State)?
.Include(x => x.Location).ThenInclude(x => x.Country)
.Where(x => x.Deleted == false
&& x.Agency.Deleted == false).ToListAsync();

我有一些市场,它们有一个导航属性 Location,而后者又有一个导航属性 State。对于某些 LocationState 为空。 Location 模型中定义的 State 的外键是一个 long?

但是,由于某种原因,结果列表中没有返回我的具有空状态的市场,返回的是具有包含在 .Include() 语句中的所有这些字段且不为空的实体。

我最初的代码没有 ? 在我的包含之后......就像:

.Include(x => x.Location).ThenInclude(x => x.State) 但这没有用。我添加了 nullable,认为它可能有帮助,但它没有。

这里有人有什么建议吗?运行此语句时,出现此异常:.SqlNullValueException:数据为空。不能对 Null 值调用此方法或属性。但是,异常不会中断流程,我得到返回的对象没有 null State

任何和所有提示将不胜感激!

编辑:

重要的是要注意,当我的所有导航属性都不为空时,代码可以正常工作。当 State 为 null(唯一可为 null 的导航属性)时,就会出现此问题。

模型:

public class Market
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long MarketId { get; set; }

[ForeignKey("Location")]
public long HeadquartersId { get; set; }

[Required]
public virtual Location Location { get; set; }
}

public class Location
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long LocationId { get; set; }

[ForeignKey("State")]
public long? StateId { get; set; }

[ForeignKey("Country")]
public long CountryId { get; set; }

[Required]
public virtual State State { get; set; }

[Required]
public virtual Country Country { get; set; }
}

最佳答案

这有点远景,但看看您是否可以在 DBContext 的 OnModelCreating 中手动配置关系。

例子:

protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Market>(a =>
{
a.HasOne(e => e.Location).WithMany().HasForeignKey(e => e.HeadquartersId).IsRequired(false);
});

builder.Entity<Location>(a =>
{
a.HasOne(e => e.State).WithMany().HasForeignKey(e => e.StateId).IsRequired(false);
a.HasOne(e => e.Country).WithMany().HasForeignKey(e => e.CountryId).IsRequired(false);
});

}

关于c# - EF 在其导航属性为 null 时不抓取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63925890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com