实体框架,ArgumentNullException

时间:2010-05-12 07:13:49

标签: c# entity-framework

我的数据库结构简单:

markimaster(id, name), modelemaster(id, marka_id), typymaster(id, model_id)

我使用以下代码定义了表之间的关系并获取数据:

ObjectQuery<markimaster> markiQuery = context.markimaster.Include("modelemaster.typymaster");

bindingSourceMarki.DataSource = markiQuery;    

最后一行使用ParamName:entity抛出ArgumentNullException。 当我将代码更改为:

ObjectQuery<markimaster> markiQuery = context.markimaster.Include("modelemaster");

bindingSourceMarki.DataSource = markiQuery;

它工作(意味着不会抛出异常),所以我想也许在typymaster中有一行没有在modelemaster中有相应的行,但是检查数据库什么都没有显示。

由于我是EntityFramework的新手,我不知道出了什么问题,所以来到这里寻找建议;)

[UPDATE]

我在我的数据库上运行了其他查询:

从modelemaster中选择*,其中model_id不在(从typymaster中选择model_id)

返回2000行。所以有些模型没有类型。

[UPDATE]

这是我的.edmx文件的片段

EntitySet Name="markimaster" EntityType="MMT_Master.store.markimaster"  store:Type="Tables" Schema="public" 
EntitySet Name="modelemaster" EntityType="MMT_Master.store.modelemaster" store:Type="Tables" Schema="public"
EntitySet Name="typymaster" EntityType="MMT_Master.store.typymaster" store:Type="Tables" Schema="public"

所以在传递给Include的路径中使用的名称似乎是正确的

2 个答案:

答案 0 :(得分:0)

使用

更改第一段代码时会发生什么
bindingSourceMarki.DataSource = markiQuery.Execute(MergeOption.AppendOnly);

?根据{{​​3}}:

  

要将对象绑定到Windows窗体控件,请将控件的DataSource属性设置为EntityCollection 或在ObjectQuery对象上调用Execute方法时返回的ObjectResult

答案 1 :(得分:0)

问题似乎与错误的EntitySet名称有关。
请检查您是否已通过包含的正确路径(可能是复数或区分大小写问题)。