Пробую переписать Java EE проект в C#. Замапил базу с помощью Entity Framework, создались классы под каждую таблицу. Везде где есть foreign key фреймворк так же подтянул соответствующую сущность, например:
namespace MainProject.Model.Entity
{
using System;
using System.Collections.Generic;
public partial class AcOpTabl
{
public Nullable<decimal> WaveLeng { get; set; }
public string Nzv { get; set; }
public string Uzv { get; set; }
public string Nsv { get; set; }
public string E { get; set; }
public Nullable<decimal> M1 { get; set; }
public Nullable<decimal> M2 { get; set; }
public Nullable<decimal> M3 { get; set; }
public int ID { get; set; }
public virtual HeadTabl HeadTabl { get; set; }
public virtual Bibliogr Bibliogr { get; set; }
}
}
Пытаюсь получить записи бд из контроллера для этой сущности, но запрос выполняется бесконечно долго. подозреваю, что дело в подтянутых сущностях по внешнему ключу и при сериализации в json попадает в бесконечный цикл...
namespace MainProject.Controller
{
public class AcOpTablsController : ApiController
{
private CrystalEntities db = new CrystalEntities();
// GET: api/AcOpTabls
public IQueryable<AcOpTabl> GetAcOpTabl()
{
return db.AcOpTabl;
}
// GET: api/AcOpTabls/5
[ResponseType(typeof(AcOpTabl))]
public IHttpActionResult GetAcOpTabl(int id)
{
AcOpTabl acOpTabl = db.AcOpTabl.Find(id);
if (acOpTabl == null)
{
return NotFound();
}
return Ok(acOpTabl);
}
// PUT: api/AcOpTabls/5
[ResponseType(typeof(void))]
public IHttpActionResult PutAcOpTabl(int id, AcOpTabl acOpTabl)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != acOpTabl.ID)
{
return BadRequest();
}
db.Entry(acOpTabl).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!AcOpTablExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST: api/AcOpTabls
[ResponseType(typeof(AcOpTabl))]
public IHttpActionResult PostAcOpTabl(AcOpTabl acOpTabl)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.AcOpTabl.Add(acOpTabl);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = acOpTabl.ID }, acOpTabl);
}
// DELETE: api/AcOpTabls/5
[ResponseType(typeof(AcOpTabl))]
public IHttpActionResult DeleteAcOpTabl(int id)
{
AcOpTabl acOpTabl = db.AcOpTabl.Find(id);
if (acOpTabl == null)
{
return NotFound();
}
db.AcOpTabl.Remove(acOpTabl);
db.SaveChanges();
return Ok(acOpTabl);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool AcOpTablExists(int id)
{
return db.AcOpTabl.Count(e => e.ID == id) > 0;
}
}
}
Если у таблицы нету внешних ключей запрос отрабатывает нормально. Как можно исправить это? В java я мог просто пометить поле класса несериализуемым и все работало как надо, как сделать так же в C#?
EDIT 1
Запрос оказывается тянет все связанные сущности, даже если нету внешнего ключа. Если другая таблица ссылается на значение в запрашиваемой таблице, то почему-то возвращает все ссылающиеся таблицы + значение из текущей.
Загрузка связанных данных в EF бывает трёх видов:
По умолчанию в EF включена ленивая загрузка, я обычно сразу отключаю её - сразу на уровне всего контекста:
public class DataContext : DbContext
{
public DataContext()
: base("name=Asdf")
{
this.Configuration.LazyLoadingEnabled = false;
}
public DbSet<Somethig> Somethig{ get; set; }
...
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
В общем поставлена задача написать информационную систему с манипуляцией текстовыми файлами, в которой будет 3-4 роли(которые имеют свои...
Решил поэкспериментировать с удаленным дебаггом, после его настройки на удаленном компьютере (он находится в локальной сети), и указав в настройках...
Есть dll которая нормально работаетПеревожу её в массив байт вот так :
Код писался под консоль, что-то вроде калькулятора для комплексных чисел, с перегрузкой каждого оператораКак перенести этот класс? В форме...