.Net Web API - 实体框架 - 在序列化期间忽略关系

时间:2012-06-18 22:50:02

标签: entity-framework asp.net-web-api

我正在创建一个ASP.Net Web API来公开现有的数据库,以便与手持设备一起使用。我在Web API,EF和我试图在这个项目上使用的所有其他东西上也相对较新:)

我希望结果数据传输尽可能轻量级,但是当api返回一个对象时,序列化的JSON具有' EntityKey'自身的字段以及与该对象有关系的其他表中的行。

我现在正在尝试使用ADO.NET DbContext模板生成器来生成模型代码。这摆脱了EntityKey字段,但我仍然在JSON中显示关系。

我想要的只是要序列化的对象的字段,并且能够将JSON反序列化为这些对象以进行插入和更新。有内置的方法吗?

我最好的选择是什么?

2 个答案:

答案 0 :(得分:3)

在您的返回值中“选择”新类型

return ienumfromedmx.Select(o=> new { id = id, value = value, name = name});

这些是您要返回的值

如果您发布一些示例代码,可能更容易为您提供更相关的代码示例

使用你的书

public Book GetBook(int id) { return books.SingleOrDefault(b => b.Id == id);}

更改为

public dynamic GetBook(int id){
return books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price});
}

OR

public object GetBook(int id){
return books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price});
}

OR(为了参考起见 - 我使用动态或对象来代替api而不是JsonResult)

public JsonResult GetBook(int id){
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price}));
}

请注意,如果您正在使用

public JsonResult GetBook(int id){
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price}));
}

如果您使用的是httpget而不是发布,那么您需要使用

public JsonResult GetBook(int id){
return Json(books.SingleOrDefault(b=>b.id == id).Select(new { id = id, Title  = Title, price = Price},JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:2)

关闭延迟加载,除非您使用Include调用明确加载,否则您的方法不会返回关系:

dbContext.Configuration.LazyLoadingEnabled = false;
// now load your data and return them to serialization