3

我有一个包含 edmx 的 dll 项目。在同一个解决方案中,我有一个 WCF 库项目,在这个项目中有一个接口和一个类来保存所有 OperationContracts。我注意到这在模型中只有一个表时效果很好。一旦我将另一个表添加到与第一个表有关系的 edmx 中,服务就会中断。所以,我已经缩小范围,我收到的错误(在一般意义上)是由于我的 EF 类型之间的关系,更具体地说是每个类中声明关系的方式......所以基本上我只是去了在我的 Person 类中找到以下内容:

public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string DisplayName { get; set; }
public bool IsEmployee { get; set; }
public Nullable<int> OrganizationId { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }

所以这导致我(我不知道为什么)尝试简单地删除与联系人和 POOF 关系上的虚拟关键字!!!!就像魔术一样,服务启动并运行,就像单个 Person 表是模型中的唯一类一样。所以我的问题是……为什么?

为什么当我删除 virtual 关键字时,WCF 服务会突然起作用?这对于 Person 和 Contact 之间的关系意味着什么?

我有一个理论认为,发生这种情况的原因是因为现在通过删除 virtual 关键字,我以某种方式破坏了 Person 和 Contact 之间的连接,使得该服务不再试图获取比 Person 更多的信息。 .因此不会破裂?

我为我在这件事上的幼稚表示歉意,但我将不胜感激。提前致谢。

4

1 回答 1

3

virtual 关键字告诉实体框架它可以(如果你也告诉它的话)在你查询集合时使用延迟加载来加载集合中的元素。

所以去掉 virtual 关键字意味着延迟加载将不再起作用。但是,如果您对此感到满意,那就太好了。

于 2013-04-29T21:09:44.503 回答