我有一个包含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; }
所以这导致我(并且我不知道为什么)尝试简单地删除与Contact和POOF的关系上的虚拟关键字!像魔术一样,服务启动和运行就像单个Person表是模型中唯一的类一样。 所以我的问题是这个......为什么?
为什么当我删除虚拟关键字时,WCF服务突然有效?这对于人与人之间的关系意味着什么?
我有一个理论认为发生这种情况的原因是因为现在通过删除虚拟关键字,我以某种方式破坏了人与接触之间的连接,使得服务不再试图引入任何更多的信息而不仅仅是人......因此不会破裂?
我为这件事的天真而道歉,但我会非常感激一点。 提前谢谢。
答案 0 :(得分:3)
虚拟关键字告诉实体框架它可以(如果你也告诉它)在查询集合时使用延迟加载来加载集合中的元素。
因此删除虚拟关键字意味着延迟加载将不再起作用。但是,如果你对此很好,那就太棒了。