具有EF Code First的WebApi在具有父子关系时生成错误

Mou*_*him 11 rest entity-framework ef-code-first asp.net-mvc-3 wcf-web-api

我对这个问题感到不满.我确实在互联网上找到了一些关于它的内容,但不是一个明确的答案.我的问题:

我必须在MVC3 Web应用程序的Model部分中的类:ParentClass和ChildClass在ParentClass上有一个属性子类型List

我使用了EF Code First,它在数据库中为我整齐地生成了父表和子表.

现在我需要一个REST服务,它返回一个List或一个ParentClass.

当我从ParentClass中删除属性Children时没有问题.但随着孩子们的到来,我不断收到错误.

错误: "The type System.Data.Entity.DynamicProxies.ParentClass_A0EBE0D1022D01EB84B81873D49DEECC60879FC4152BB115215C3EC16FB8003A was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically."}

一些代码:

类别:

     public class ParentClass
{
    public int ID { get; set; }
    public string Name {get;set;}
    public virtual List<ChildrenClass> Children { get; set; }

}

public class ChildrenClass
{
    public int ID { get; set; }
    public string MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

服务:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
public class MyService
{

    static MyContext db;
    public MyService() { db = new MyContext(); }


    [WebGet(UriTemplate = "")]
    public List<ParentClass> GetParents()
    {
        var result = db.Parents.ToList();
        return result;

    }
Run Code Online (Sandbox Code Playgroud)

callinh这项服务时我不会得到结果.我究竟做错了什么?

Mou*_*him 12

我不得不在上下文配置中使用DisableProxyCreation:

[OperationContract] 
[WebGet(UriTemplate = "")] 
public List<ParentClass> GetParents() 
{ 
     using (DBContext context = new DBContext()) 
     {
         context.Configuration.ProxyCreationEnabled = false; 
         List<ParentClass> parents = context.Parents
             .Include("Children") 
             .ToList();
         return parents; 
      }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说很好.


归档时间:

查看次数:

9286 次

最近记录:

8 年,1 月 前