我有一个Linq to SQL类。Linq to SQL集合不填充
在我的数据库中有一对多的关系。
该关系在设计器中正确映射,并且在设计器中创建了EntitySet<>
属性。
当我运行的代码中,EntitySet<>
不与任何数据填充,即使有相关的记录,他们不填充到EntitySet<>
我缺少某些属性或设置?我必须自己写查询吗?我觉得我失去了一些明显的东西。
这里是设计师代码:
[Association(Name = "Bar_Foo", Storage = "_Foo", ThisKey = "ID", OtherKey = "BarID")]
[DataMember(Order = 15, EmitDefaultValue = false)]
public EntitySet<Foo> Foos
{
get
{
if ((this.serializing && (this._Foo.HasLoadedOrAssignedValues == false)))
{
return null;
}
return this._Foo;
}
set
{
this._Foo.Assign(value);
}
}
这是我试图访问的EntitySet <>代码:
partial void OnCreated()
{
foreach (Foo foo in Foos)
{
foo.DoSomething();
}
}
我的情况的更多信息:
所以,从上面我有一个班级酒吧与Foo的集合。我想要做的是通过WCF服务将Bar传递给UI。以下是我的主要服务电话:
public class TheService : ITheService
{
public List<Bar> GetBars()
{
try
{
using (var db = new BarDataContext())
{
List<Bar> Bars = new List<Bar>();
Bars = (from B in db.Bars
select B).ToList();
return Bars;
}
}
catch (Exception ex)
{
throw new FaultException(ex.Message + " Something in GetBars() Stack Trace: " + ex.StackTrace);
}
}
}
目前,当服务返回酒吧的每个酒吧内FOOS为空。
如果我在Bar中查看Foos的属性,我会得到一个空引用异常。
我尝试运行在OnCreated方法查询,以填补FOOS,目前酒吧的ID为0
更新查询仍然不能正常工作:
using (var ctx = new BarDataContext())
{
List<Bar> Bars= new List<Bar>();
Bars= (from B in ctx.Bars
select B).ToList();
foreach (Bar bar in Bars)
{
bar.Foos= (from B in ctx.Bars
where B.ID == bar.ID
select B.Foos).SingleOrDefault();
}
return Bars;
}
这当我尝试从Bar中查询Foos时,代码会生成一个空引用异常。
编辑:
上面的代码神奇不再扔空引用异常,不知道为什么。我发现有趣的是,你甚至不需要设置bar.Foos在上面的查询中,你可以将Foos查询放入一个永远不会使用的变量中,它将填充Bar.Foos属性,仅仅因为你看了FOOS。让我想起薛定谔的猫。
你可以发布你正在使用的代码,这将有助于很多在这种情况下。 – 2010-01-15 19:06:47
请张贴一些代码,以便我们可以更好地了解问题 – 2010-01-15 19:11:30