代码之家  ›  专栏  ›  技术社区  ›  p.campbell

linq to sql:子属性为空,即使返回了该属性

  •  0
  • p.campbell  · 技术社区  · 15 年前

    脚本 答: Customer 实体具有的属性 State Color . 即华盛顿和格林。SQL Server外键关系设置良好,所有关系都具有正确的数据和适当的引用完整性。

    考虑此Linq to SQL查询:

    var cust = (from c in db.Customers
      join s in db.States on c.StateID equals s.ID
      join cl in db.Color on c.ColorID equals cl.ID
      where c.ID == someCustomerID
      select c).SingleOrDefault();
    

    鉴于 :通过SQL Server事件探查器查看时生成的SQL语句将生成正确的查询。在SQL Management Studio中捕获和运行相同的查询将按预期返回数据。

    这个 cust.StateID cust.State 属性填充良好。我可以在执行上面的L2S查询之后检查这些属性。

    问题 : cust.Color 对象,计算结果为 null . 好消息是 cust.ColorID 用数据库中正确的FK编号填充。颜色表中有一行具有该ID。

    问题 :如何更改或改进此查询以包括颜色实体?

    编辑:结束此问题

    问题的根源在于LinqToSQL设计器,以及之前对FK关系的破坏。客户和颜色之间的关联与客户上的另一个字段关联。这是完全的Pebkac,我没有检查过L2S设计师是否有任何问题。我从L2S设计器中删除了颜色表,在服务器资源管理器中刷新了表列表,并再次将颜色表拖到L2S。协会被纠正了。

    3 回复  |  直到 11 年前
        1
  •  1
  •   Josh E    15 年前

    是否有与数据上下文关联的LoadOptions对象?尝试将其与以下内容一起添加:

    var lo = new LoadOptions(x => x.Color);
    lo.LoadWith<Color>();
    using (var db = new SomeDataContext())
    {
      db.LoadOptions = lo;
    . . . 
    }
    
        2
  •  1
  •   Tim Schmelter    11 年前

    就我而言 ObjectTrackingEnabled = false DataContext ,所以我改变了:

    using (var db = new ERPDataContext() { ObjectTrackingEnabled = false })
    {
        // ..
    }
    

    我也可以简单地省略它,因为 ObjectTrackingEnabled = true 默认值):

    using (var db = new ERPDataContext() { ObjectTrackingEnabled = true})
    {
        // ..
    }
    
        3
  •  0
  •   p.campbell    15 年前

    问题的根源在于LinqToSQL设计器,以及之前对FK关系的破坏。客户和颜色之间的关联与客户上的另一个字段关联。这是完全的Pebkac,我没有检查过L2S设计师是否有任何问题。我从L2S设计器中删除了颜色表,在服务器资源管理器中刷新了表列表,并再次将颜色表拖到L2S。协会被纠正了。