Я новичок в Entity Framework и Fluent Api. Я создал несколько моделей, создал базу данных. Я не уверен, но я думаю, что настроил Fluent Api. В базе пока данные остутсвуют. Проблема вот в чем. Когда я ввожу в браузер контроллер для Web Api появляется ошибка: например: ...../api/AirportAPI.
the 'objectcontent 1' type failed to serialize the response body for content type '**application/xml**
Когда я настроил в Global.asax, то ошибка не изменилось:
the 'objectcontent 1' type failed to serialize the response body for content type 'application/json
Кстати, это тестовое задание месяц назад я задавал вопрос
Когда добавил данные в базу тоже ничего не поменялось. Можете помочь где я допустил ошибку.
Airport.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebServiceForAirport.Models
{
public class Airport
{
public int ID { get; set; }
public string Country { get; set; }
public string City { get; set; }
public string NameAirport { get; set; }
public string Airline { get; set; }
public string CodeAirport { get; set; }
public bool Active { get; set; }
public virtual Information information { get; set; }
public virtual ICollection<Departure_Arrival> DepArrList { get; set; }
public virtual ICollection<PitStop> PitStopList { get; set; }
public Airport()
{
DepArrList = new List<Departure_Arrival>();
PitStopList = new List<PitStop>();
}
}
}
Departure-Arrival.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebServiceForAirport.Models
{
public class Departure_Arrival
{
public int ID { get; set; }
public string Departure { get; set; }
public string Arrival { get; set; }
public int? AirID { get; set; }
public virtual Airport airport { get; set; }
}
}
Information.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace WebServiceForAirport.Models
{
/// <summary>
///
/// </summary>
public class Information
{
public int ID { get; set; }
public string NumberFlight { get; set; }
public string NumberBoard { get; set; }
public virtual Airport airport { get; set; }
}
}
PitStop.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebServiceForAirport.Models
{
/// <summary>
///
/// </summary>
public class PitStop
{
public int ID { get; set; }
public string PitStopCity { get; set; }
public DateTime PitStopTime { get; set; }
public int? AirID { get; set; }
public virtual Airport airport { get; set; }
}
}
AirportDBContext.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace WebServiceForAirport.Models
{
public class AirDBContext:DbContext
{
public DbSet<Airport> Airports { get; set; }
public DbSet<Departure_Arrival> Departires_Arrivals { get; set; }
public DbSet<PitStop> PitStops { get; set; }
public DbSet<Information> Informations { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Primary Key for Airport
modelBuilder.Entity<Airport>()
.HasKey(a => a.ID);
//Primary Key for Departure-Arrival
modelBuilder.Entity<Departure_Arrival>()
.HasKey(da => da.ID);
//Primary Key for PitStop
modelBuilder.Entity<PitStop>()
.HasKey(p => p.ID);
//Primary Key for Information
modelBuilder.Entity<Information>()
.HasKey(i => i.ID);
//one-to-one Airport - Information
modelBuilder.Entity<Airport>()
.HasRequired(a=>a.information)
.WithRequiredPrincipal(a=>a.airport);
//one-to-many Airport - Departure-Arrival
modelBuilder.Entity<Airport>()
.HasMany(a => a.DepArrList)
.WithRequired(da => da.airport);
//one-to-many Airport - PitStop
modelBuilder.Entity<Airport>()
.HasMany(a => a.PitStopList)
.WithRequired(pi => pi.airport);
base.OnModelCreating(modelBuilder);
}
}
}
Global.asax.cs
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
}
}
Web.Config
<connectionStrings>
<add name="AirDBContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename='|DataDirectory|\AirportDataBase.mdf';Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>
AirportAPIController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebServiceForAirport.Models;
using System.Data.Entity;
namespace WebServiceForAirport.Controllers
{
public class AirportAPIController : ApiController
{
AirDBContext db;
public AirportAPIController()
{
db = new AirDBContext();
}
public IEnumerable<Airport> GetAll()
{
return db.Airports;
}
}
}
Измените конструктор AirportAPIController следующим образом:
public AirportAPIController()
{
db = new AirDBContext();
db.Configuration.ProxyCreationEnabled = false;
}
А лучше сделайте отдельную модель для возвращаемых данных, как рекомендовал tym32167. Дело в том, что когда вы получаете данные из Entity Framework, на самом деле вы получаете не свои оригинальные классы, а автоматически сгенерированные прокси. Эти прокси EF использует для отслеживания изменений в модели и реализации алгоритма Lazy Load и они очень плохо или совсем не сериализуются. db.Configuration.ProxyCreationEnabled = false; - выключит генерацию этих прокси.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне нужно получить список шаблонов процесса в TFS, чтобы в дальнейшем создавать свои шаблоны процессовКак получить этот интерфейс?
Организовала вывод вопросов из базы данных, но не могу правильно написать запрос или функцию, чтобы ответы по айди вопроса подцеплялись к немуСейчас...
как получить данные тега по определённому атрибуту(id) допустим данные 54 атрибутаhttp://joxi