Estou começando a aprender c#, e estou com a seguinte duvida. Tenho as tabelas lote, leitura e consumo. A tabela leitura herda de lote o ID. um lote tem muitas leituras. E uma leitura tem um consumo.
A real duvida e a seguinte: quando faço a inserção de uma leitura o consumo já é salvo automático, porém quero buscar a última leitura inserida com aquele ID fazer a subtração do número dela pra poder gerar o valor certo na tabela consumo. e não estou conseguindo fazer isso.
[Table("Lote")]
public class Lote
{
[Key]
public int Id { get; set; }
[Required]
[MinLength(2, ErrorMessage ="O nome deve ter no minimo 2 caracters")]
[MaxLength(140, ErrorMessage ="O nome pode ter no maximo 140 caracteres")]
public string Proprietario { get; set; }
public string CPF { get; set; }
//Gera um checkbox
public Boolean Socio { get; set; }
public string Cavalete { get; set; }
public virtual ICollection<Leitura> Leituras { get; set; }
}
[Table("Leitura")]
public class Leitura
{
[Key]
public int Id { get; set; }
[ForeignKey("Lote")]
public int LoteId { get; set; }
public DateTime DataLeitura { get; set; }
public int NumeroLeitura { get; set; }
public virtual Lote Lote { get; set; }
public virtual Consumo Consumo { get; set; }
}
public class Consumo
{
[Key, ForeignKey("Leitura")]
public int Id { get; set; }
public Double Valor { get; set; }
public DateTime? DataPagamento { get; set; }
public virtual Leitura Leitura { get; set; }
}
A parte de create da controller é essa
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,LoteId,DataLeitura,NumeroLeitura")] Leitura leitura)
{
if (ModelState.IsValid)
{
//aki tudo que ja tentei
/*
* var leitura2 = from l in db.Leitura select l;
leitura2 = leitura2.OrderByDescending(l => l.Id);
db.Leitura.Where(l => l.LoteId == leitura.LoteId).OrderByDescending(l=> l.NumeroLeitura);
// db.Leitura.leitura2.NumeroLeitura = db.Leitura.Where(l => l.LoteId == leitura.LoteId).FirstAsync;
// db2.Leitura.Find(leitura2.LoteId).;
var sql = db.Leitura.SqlQuery("select ID from Leitura Order by ID DESC;");
*/
var consumo = new Consumo();
consumo.Leitura = leitura;
//Essa parte que faz a conta apra salvar o consumo
consumo.Valor =( leitura.NumeroLeitura) * 0.71;
//quero fazer +- isso
//consumo.Valor = (leitura.NumeroLeitura< <- ESSE SERIA O VALOR DA LEITURA ANTERIOR> - leitura.NumeroLeitura) * 0.71;
db.Leitura.Add(leitura);
db.Consumo.Add(consumo);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.LoteId = new SelectList(db.Lote, "Id", "CPF", leitura.LoteId);
return View(leitura);
}