gpt4 book ai didi

c# - Entity Framework ,代码优先。调用时不填充子对象

转载 作者:太空狗 更新时间:2023-10-29 17:29:42 24 4
gpt4 key购买 nike

我首先要掌握 EF 代码。当我在代码中调用它们时,我的域模型设计似乎不支持自动“填充”对象的子对象。

型号:

public class Car
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

[Required,MaxLength(10)]
public string Registration { get; set; }

[MaxLength(30)]
public string Make { get; set; }

[MaxLength(45)]
public string Model { get; set; }

[Required]
public Coordinates Coordinates { get; set; }

[Required]
public Client Client { get; set; }
}

public class Coordinates
{
[Key, ForeignKey("Car")]
public int Id { get; set; }

public double Latitude { get; set; }

public double Longitude { get; set; }

[Required]
public Car Car { get; set; }
}

例如,我简单地调用:

public List<Car> Get()
{
var cars = _context.Cars.ToList();
return cars;
}

我的对象包含数据库中的所有 Cars,但不包含 Coordinates。数据库种子正确创建了数据,但我无法让 EF 自动引用 CoordinatesClient。但我怀疑一旦我们解决了一个问题,它就会解决另一个问题。

我做错了什么,我是否误解了该怎么做?

最佳答案

这里有几个选择:

  • 通过告诉 EF 到 Include() 来急切加载相关实体他们。例如,您可以像这样加载 Cars,包括它们的 CoordinatesClients:

    public List<Car> Get()
    {
    var cars = _context.Cars
    .Include(car => car.Coordinates)
    .Include(car => car.Client)
    .ToList();
    return cars;
    }
  • 通过声明导航属性 virtual 来延迟加载相关实体,从而告诉 EF 在首次访问时加载它们。确保你没有像这样为你的上下文禁用延迟加载:

    this.Configuration.LazyLoadingEnabled = false;

一个简短的例子是这样的:

public class Car
{
// ... the other properties like in your class definition above

public virtual Coordinates Coordinates { get; set;}
}

public void Get()
{
var cars = _context.Cars.ToList();
var coordinates = cars.First().Coordinates; // EF loads the Coordinates of the first car NOW!
}
  • 将相关实体显式加载到上下文中。然后上下文将为您填充导航属性。看起来像这样:

    public List<Car> Get()
    {
    // get all cars
    var cars = _context.Cars.ToList();

    // get all coordinates: the context will populate the Coordinates
    // property on the cars loaded above
    var coordinates = _context.Coordinates.ToList();
    return cars;
    }

关于c# - Entity Framework ,代码优先。调用时不填充子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23979635/

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