2012-06-18 2 views
4

Я создаю веб-API ASP.Net, чтобы открыть существующую базу данных для использования с карманными устройствами. Я также относительно новичок в Web API, EF и все остальное, что я пытаюсь использовать в этом проекте :).Net Web API - Entity Framework - игнорировать отношения во время сериализации

Я хочу, чтобы результирующая передача данных была как можно более легкой, но когда api возвращает объект, Сериализованный JSON имеет поля EntityKey для себя и строки из других таблиц, с которыми объект имеет отношение.

Теперь я пытаюсь использовать генератор шаблонов ADB.NET DbContext для генерации кода модели. Это избавляет от полей EntityKey, но у меня все еще есть отношения, появляющиеся в JSON.

Все, что я хочу, это поля из объекта, который будет сериализован, и иметь возможность десериализовать JSON в эти объекты для вставок и обновлений. Есть ли встроенный способ сделать это?

Какой у меня лучший выбор?

ответ

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}); 
} 

ИЛИ

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

ИЛИ (ради эталонным - Я бы использовать динамический или объект для 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})); 
} 

и если вы используете http получить в противоположности к сообщению, вы должны были бы использовать

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

так для: 'public class Book { public int Id {get; задавать; } public string Имя {get; задавать; } public decimal Цена {get; задавать; }} ' и контроллер: ' Книга общественного GetBook (интермедиат идентификатор) { возврата books.SingleOrDefault (б => b.Id == ID); } ' Как вы меняете метод контроллера, чтобы он мог возвращать анонимные типы? –

+0

измените свой тип возврата на динамический, так что общедоступный динамический GetBook (int id) ИЛИ открытый объект GetBook (int id) также будет работать –

+0

Sorry -the JsonResult больше подходит для std MVC, а не API - я понял, после того, как вспомнил после того, как я добавил, что мы говорили об API - не хотели удалять его, если бы он был полезен –

2

Выключите отложенную загрузку и ваш метод не будет возвращать отношения, если вы явно не загружать их с Include вызова:

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

Сохраняется ли это для сеанса? Или пока контекстный экземпляр не будет удален? – seebiscuit

Смежные вопросы