0

我有以下模型,其中“位置”作为表位置的外键

 public class Restaurant
{
    public int id{ get; set; }
    public string  name{ get; set; }
    public ICollection<Locations> locations { get; set; }
}

为什么当我初始化我的模型餐厅时,位置设置为null除非我在调用属性示例之前调用了位置数据库上下文:

 var t = db.Restaurant.First(); // the locations attribute is null
 db.Locations.First(); // calling the locations db context
 t; // now t.locations has one record without adding anything just loading the DB

每当我调用位置时,我怎么能做到它会自动启动查询...

4

3 回答 3

0

使用以下代码:

public class Restaurant
{
    public Restaurant()
    {
        locations = new List<Locations>();
    }

    public int id{ get; set; }
    public string  name{ get; set; }
    public ICollection<Locations> locations { get; set; }
}
于 2012-11-24T20:49:19.593 回答
0

修改您的获取访问器。

get
{
  if(!_locations.Any()
  _locations.Add(db.Locations.First();
  return _locations;
}
于 2012-11-24T19:49:27.693 回答
0

您要的是延迟加载功能。你用什么来访问数据(我猜是 EF)。如果你使用 EF,你应该启用延迟加载。但要小心,由于延迟加载可能是邪恶的功能。

到目前为止,如果您希望将位置与餐厅对象一起使用,您可以在餐厅构造函数中自动填充您的位置:

public class Restaurant
{
    public Restaurant() {
       // fill locations
    }

    public int id{ get; set; }
    public string  name{ get; set; }
    public ICollection<Locations> locations { get; set; }
}
于 2012-11-24T20:19:29.920 回答