为什么我的超级简单的ASP.NET Web API(mvc4)+实体框架5不起作用?

You*_*jae 1 asp.net-web-api entity-framework-5

我花了好几天才知道我的工作问题,但没有运气.

  1. 我创建了新的MVC4 Web API项目.
  2. 使用我的数据库添加EF5(项目>添加> ADO.NET实体数据模型>从Azure SQL中的数据库创建).
  3. 将两个表添加到edmx,如下所示.两个*.tt文件成功生成实体和模型类.

在此输入图像描述

我可以看到断点(结果)正常给出查询结果. 但是json给出了异常流而没有错误消息.(即,http://localhost:41813/api/sheet/157返回"157",无法下载.一般情况下,"157.json"下载)

在此输入图像描述

我将结果中的属性复制到我手工制作的POCO风格的类中,它可以工作.

我的问题是什么?我不能使用生成的模型类通过Json发送数据.我几乎没有发现问题,因为在结果断点之后没有错误消息和没有可用的调试步骤.

tpe*_*zek 6

序列化失败的原因是您的导航属性 - 当序列化程序尝试遍历对象图时,它们会导致循环依赖.

为了使您的简单样本工作,您几乎没有办法解决它.

  1. 从中删除导航属性 SheetSheetDetail
  2. 在省略了Navigation Property的ViewModel类中包装对象 Sheet
  3. 创建一个元数据类,JsonIgnoreAttribute然后将其附加到具有部分类和的实体MetadataTypeAttribute

在这里你可以找到第三个解决方案的样本(样本做了一些假设,因为我不知道你的确切数据类型):

public class SheetDetailSerializationMetadata
{
    [JsonIgnore]
    public Sheet Sheet { get; set; }
}

[MetadataType(typeof(SheetDetailSerializationMetadata))]
public partial class SheetDetail
{ 
}
Run Code Online (Sandbox Code Playgroud)

  • +1,看起来像圆形对象也引用给我.这是一个很好的链接:http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization (2认同)