我有一个包含 edmx 的 dll 项目。在同一个解决方案中,我有一个 WCF 库项目,在这个项目中有一个接口(interface)和一个类来保存所有 OperationContracts。我注意到这对模型中的一张 table 效果很好。一旦我将另一个表添加到与第一个表有关系的 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 的关系中的 virtual 关键字!!!!就像魔术一样,服务启动并运行,就像单个 Person 表是模型中唯一的类一样。 所以我的问题是……为什么?
为什么当我删除 virtual 关键字时 WCF 服务突然工作?这对于 Person 和 Contact 之间的关系意味着什么?
我有一个理论认为,发生这种情况的原因是因为现在通过删除 virtual 关键字,我以某种方式破坏了 Person 和 Contact 之间的连接,以至于服务不再尝试获取更多信息,而不仅仅是人……因此不会崩溃?
对于我在这件事上的天真,我深表歉意,但如果能澄清一点,我将不胜感激。 提前致谢。
最佳答案
virtual 关键字告诉 Entity Framework 它可以(如果您也告诉它)在您查询集合时使用延迟加载来加载集合中的元素。
所以删除 virtual 关键字意味着延迟加载将不再起作用。但如果您对此没有意见,那就太好了。
关于c# - 在不重新创建模型的情况下在 WCF 服务中使用 Entity Framework 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16288197/